
On Tue, 2009-12-29 at 02:07 -0800, CK Kashyap wrote:
Thanks Jason,
You should make a `Functor' instance since monads are all functors (though the typeclass does not enforce this).
What are the benefits of making it an instance of Functor?
1. For example to use function of type Functor f => f a -> f d. 2. Also you need Functor to have Applicative which is rather useful (f < $> arg1 <*> arg2 <*> arg3 <*> ... as opposed to return f `ap` arg1 `ap` arg2 `ap` arg3 ..., (*>), (<*) etc.) 3. Because it is functor ;). Every Monad is functor: instance Functor MyMonad where fmap = liftM instance Applicative MyMonad where pure = return (<*>) = ap 4. If you use Control.Applicative you can find: read <$> getLine I find it much more readable then liftM read getLine (it looks nearly like read $ getLine). Regards