Good point!

On Wed, Mar 9, 2016 at 11:48 AM, Ryan Ingram <[email protected]> wrote:

> I think it's more like the non-keyworded default definitions of class
> methods, for the same reasons; the default definition has to potentially be
> valid for all instances of the class​.
>
> It's the difference between
>
> class Applicative m => Monad m where
>     return :: a -> m a
>     return = pure  -- always valid, but can be overridden in instance
> declarations
>
> and
>
> class Fuctor f => Applicative f where
>     (<*>) :: f (a -> b) -> f a -> f b
>     default (<*>) :: Monad f => f (a -> b) -> f a -> f b
>     (<*>) = ap -- only valid if matches the type signature above
>
>
_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to