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  }