Proposal: Add Applicative instances for the remaining monads in base

Paterson, Ross R.Paterson at
Fri Nov 11 18:05:19 CET 2011

Bas van Dijk writes:
> instance ArrowApply a => Applicative (ArrowMonad a) where
>     pure = return
>     (<*>) = ap

You don't actually need ArrowApply there:

instance Arrow a => Applicative (ArrowMonad a) where
    pure x = ArrowMonad (arr (const x))
    ArrowMonad f <*> ArrowMonad x = ArrowMonad (f &&& x >>> arr (uncurry id))

Of course for this and the Functor instance ArrowMonad is a poor name.

More information about the Libraries mailing list