[Haskell-cafe] Retrospective type-class extension

Miguel Mitrofanov miguelimo38 at yandex.ru
Thu May 20 08:10:53 EDT 2010


That won't be a great idea; if I just want my monad to be declared as one, I would have to write

instance Functor MyMonad where fmap = ...
instance Pointed MyMonad where pure = ...
instance Applicative MyMonad where (<*>) = ...
instance Monad MyMonad where join = ...

Compare this with

instance Monad MyMonad where
   return = ...
   (>>=) = ...

and take into account that (>>=) is usually easier to write than join.

Limestraël wrote:
> Then it would be:
> 
> class Functor f where
>     fmap :: (a -> b) -> f a -> f b
> 
> class (Functor f) => Pointed f where
>     pure :: a -> f a
> 
> class (Pointed f) => Applicative f where
>     (<*>) :: f (a -> b) -> f a -> f b
> 
> class (Applicative f) => Monad f where
>     join :: f (f a) -> f a
> 
> This would be a great idea, for the sake of logic, first (a monad which 
> is not a functor doesn't make sense), and also to eliminate redudancy 
> (fmap = liftM, ap = (<*>), etc.)
> 
> 2010/5/20 Tony Morris <tonymorris at gmail.com <mailto:tonymorris at gmail.com>>
> 
>     Ivan Miljenovic wrote:
>      > On 20 May 2010 14:42, Tony Morris <tonymorris at gmail.com
>     <mailto:tonymorris at gmail.com>> wrote:
>      >
>      >> We all know that "class (Functor f) => Monad f" is preferable
>     but its
>      >> absence is a historical mistake. We've all probably tried once:
>      >>
>      >> instance (Functor f) => Monad f where
>      >>
>      >
>      > Do you mean the reverse of this (instance (Monad m) => Functor m
>     where) ?
>      >
>     Yes.
> 
>     --
>     Tony Morris
>     http://tmorris.net/
> 
> 
>     _______________________________________________
>     Haskell-Cafe mailing list
>     Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
>     http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list