4 ms·
I'm still slightly confused. The author suggests that a monad is composed of 3 functions. It seems to me you've shown 2 of these functions. a -> m b >>= What
by slmyers 10y ago
I'm still slightly confused. The author suggests that a monad is composed of 3 functions. It seems to me you've shown 2 of these functions.
a -> m b
>>=
What is the third function? Did I misunderstand you?
- gizmo686 10y agoThe author is mistaken. There are only two functions necessary for a monad: >>= and return Also, the type of return is `a -> m a`. The type you cite `a -> m b` is a parameter to >>= (which has type `m a -> (a -> m b) -> m b. The author might be refering to a quirk of the Haskell monad interface, which has to additional functions: ">>" which can be easily defined in terms of >>=. I assume this is part of the interface so users can override it with a more efficient implementation, but every implementation I have seen just uses the default one. "fail" which is an error handler. This is being depreciated as a function of Monads, and moved into its own MonadFail typeclass. This also has a default implementation that just throws an exception.
- acomar 10y ago> The author is mistaken. There are only two functions necessary for a monad: >>= and return Probably because monads are frequently described as triples -- two functions and a functor. The author seems to have reduced that to three functions (presumably fmap) without realizing that it isn't sufficient.
- rdnetto 10y agoI suspect the third function is the one for running the monad. It's different for each one, so it's not part of the type class, but you do need it to use a given monad. (Except IO, though even it has unsafePerformIO)
- gizmo686 10y agoWhat is the function for running Maybe, or List?