
9 Mar
2016
9 Mar
'16
9:07 p.m.
Good point!
On Wed, Mar 9, 2016 at 11:48 AM, Ryan Ingram
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