[Haskell-cafe] Why Kleisli composition is not in the Monad signature?

Tony Morris tonymorris at gmail.com
Wed Oct 24 08:22:21 CEST 2012


As a side note, I think a direct superclass of Functor for Monad is not
a good idea, just sayin'

class Functor f where
  fmap :: (a -> b) -> f a -> f b

class Functor f => Apply f where
  (<*>) :: f (a -> b) -> f a -> f b

class Apply f => Bind f where
  (=<<) :: (a -> f b) -> f a -> f b

class Apply f => Applicative f where
  unit :: a -> f a

class (Applicative f, Bind f) => Monad f where

Same goes for Comonad (e.g. [] has (=<<) but not counit)
... and again for Monoid, Category, I could go on...


On 17/10/12 04:14, David Thomas wrote:
> I think the version below (with a Functor or Applicative superclass)
> is clearly the right answer if we were putting the prelude together
> from a clean slate.  You can implement whichever is easiest for the
> particular monad, use whichever is most appropriate to the context
> (and add optimized versions if you prove to need them).  I see no
> advantage in any other specific proposal, except the enormous
> advantage held by the status quo that it is already written, already
> documented, already distributed, and already coded to.
>
> Regarding mathematical "purity" of the solutions, "this is in every
> way isomorphic to a monad, but we aren't calling it a monad because we
> are describing it a little differently than the most common way to
> describe a monad in category theory" strikes me as *less*
> mathematically grounded than "we are calling this a monad because it
> is in every way isomorphic to a monad."
>
> On Tue, Oct 16, 2012 at 7:03 AM, AUGER Cédric <sedrikov at gmail.com> wrote:
>> So I think that an implicit question was why wouldn't we have:
>>
>> class Monad m where
>>   return :: a -> m a
>>   kleisli :: (a -> m b) -> (b -> m c) -> (a -> m c)
>>   bind = \ x f -> ((const x) >=> f) ()
>>   join = id>=>id :: (m (m a) -> m a)
>> _______________________________________________
>> Haskell-Cafe mailing list
>> 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


-- 
Tony Morris
http://tmorris.net/





More information about the Haskell-Cafe mailing list