class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
The most important function for dealing with monads is the bind operator >>=
:
(>>=) :: m a -> (a -> m b) -> m b
m a
as "an action with an a
result".a -> m b
as “an action (depending on an a
parameter) with a b
result.”.>>=
sequences two actions together by piping the result from the first action to the second.
The other function defined by Monad
is:
return :: a -> m a
Its name is unfortunate: this return
has nothing to do with the return
keyword found in imperative programming languages.
return x
is the trivial action yielding x
as its result. (It is trivial in the following sense:)
return x >>= f ≡ f x -- “left identity” monad law
x >>= return ≡ x -- “right identity” monad law