
On Sat, Nov 19, 2005 at 05:51:44PM +0300, Bulat Ziganshin wrote:
-- If @f@ is also a 'Functor', define @('<$>') = 'fmap'@. -- If it is also a 'Monad', define @'pure' = 'return'@ and @('<*>') = 'ap'@.
why you don't just define:
instance Monad m => Applicative m where pure = return (<*>) = ap
Because that instance would overlap with all others. As it is, these classes are Haskell 98. Better language support for superclasses would be useful here, but is unavailable right now.
RP> They are proposed for the base package, and would replace FunctorM.
it is a beatiful contribution. but it doesn't work without definitions for All, Any and so on :)
I'm not sure I understand this one. These types are defined in Data.Monoid in CVS, and coming soon to a Haskell implementation near you.