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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe