Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Must I implement Applicative and Functor to implement a Monad

I'm trying to implement a Monad instance. As a simpler example, assume the following:

data Maybee a = Notheeng | Juust a 

instance Monad Maybee where
   return x = Juust x
   Notheeng >>= f = Notheeng
   Juust x >>= f = f x
   fail _ = Notheeng 

This should be the standard implementation of Maybe as far as I know. However, this doesn't compile, because the compiler complains:

No instance for (Applicative Maybee)

and similarly he wants a Functor instance once the Applicative is given.

So: Simple question: Must I always implement Functor and Applicative before I can implement a Monad?

like image 618
trevore Avatar asked Apr 24 '15 10:04

trevore


1 Answers

Yes, it wasn't the case before, it's a change that was introduced in ghc7.10 under the name of Functor-Applicative-Monad Proposal.

like image 129
Nicolas Avatar answered Oct 10 '22 06:10

Nicolas