Proposal: Applicative => Monad: Call for consensus

wren ng thornton wren at freegeek.org
Tue Jan 4 03:58:03 CET 2011


On 1/3/11 7:22 PM, Isaac Dupree wrote:
> On 01/03/11 17:30, Bas van Dijk wrote:
>> ...
>> The patch for base makes a few changes:
>>
>> 1) Make Applicative a superclass of Monad. So the new hierarchy becomes:
>>
>> 2) Make 'join' a method of Monad.
>> ...
>> class Applicative m => Monad m where
>> ...
>> (>>) :: forall a b. m a -> m b -> m b
>> (>>) = (*>)
>
> The former/current default definition of (>>) was based on (>>=), not
> (*>) (which if itself is undefined, itself defaults to (fmap (const id)
> a <*> b). That's a change.

Yes, that is a change.

> You also added defaults for most of the Monad methods, though they're
> obvious and I approve. The (>>) default might have worse performance
> than the previous default though?

Nope. Since (*>) is a class method it can be given the most efficient 
implementation possible for the given type. Since (>>) is logically the 
same function, then it should default to (*>) so that the efficient 
implementation doesn't need to be duplicated. In the event that neither 
is defined explicitly, then they will both default to the same 
definition as pre-patch.

-- 
Live well,
~wren



More information about the Libraries mailing list