3.9. Defining a Monad

From the documentation for Haskell's Monad typeclasshttp://www.haskell.org/ghc/docs/latest/html/base/GHC.Base.html#Monad we see that a monad has these functions:

(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a

But to create your own monads, you have to define (>>=) and return. But we can't talk about this much without learning about typeclasses.