[Haskell-beginners] Re: Thinking about monads
Brent Yorgey
byorgey at seas.upenn.edu
Tue Apr 14 16:42:08 EDT 2009
On Mon, Apr 13, 2009 at 03:11:42PM -0700, Michael Mossey wrote:
>
> I know Maybe is both a functor and a monad, and I was thinking: what's the
> difference? They are both wrappers on types. Then I realized, the
> difference is: they have different class definitions.
In fact, every monad should be a functor, but not every functor is a
monad. Being a monad is a much stronger condition than being a functor.
>
> class Functor f where
> fmap :: (a->b) -> f a -> f b
>
> (Note how fussy this definition would be in C++. It would be a kind of
> template, but would probably look a lot more complex and would require
> lengthy declarations.)
>
> class Monad m where
> a >>= b :: m a -> (a -> m b) -> m b
Don't forget return :: a -> m a ! That's the other key method in the Monad
class. (There are also >> and 'fail' but those are unimportant---the
first is just a specialization of >>=, and fail is a hack).
-Brent
More information about the Beginners
mailing list