github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch10-monads/01_car_steps/src/workflow/monad.go (about) 1 package workflow 2 3 type Data interface{} 4 type Monad func(error) (Data, error) 5 6 func Get(d Data) Monad { 7 return func(e error) (Data, error) { 8 return d, e 9 } 10 } 11 12 func Next(m Monad, f func(Data) Monad) Monad { 13 return func(e error) (Data, error) { 14 newData, newError := m(e) 15 if newError != nil { 16 return nil, newError 17 } 18 return f(newData)(newError) 19 } 20 }