Proposal: Add Applicative instances for the remaining monads in base

Hello, The only public monads in base that don't have Applicative instances yet are: ReadP, ReadPrec and ArrowMonad. Because of the rule of least surprise I would like to propose adding Applicative instances for these monads. Concretely I would like to propose adding the following to Control.Applicative: instance Applicative ReadP where pure = return (<*>) = ap instance Alternative ReadP where empty = mzero (<|>) = mplus instance Applicative ReadPrec where pure = return (<*>) = ap instance Alternative ReadPrec where empty = mzero (<|>) = mplus instance ArrowApply a => Applicative (ArrowMonad a) where pure = return (<*>) = ap And adding a Functor instance for ArrowMonad to Control.Arrow: instance Arrow a => Functor (ArrowMonad a) where fmap f (ArrowMonad m) = ArrowMonad $ m >>> arr f Discussion deadline: I don't think this is a controversial proposal and so I don't expect objections. Can we bend the rules a bit and shorten the discussion period so this can be integrated into the base library that comes with the upcoming ghc-7.4? Regards, Bas

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.

We also seem to be missing instance ArrowPlus a => Alternative (ArrowMonad a) where empty = ArrowMonad zeroArrow ArrowMonad x <|> ArrowMonad y = ArrowMonad (x <+> y) instance (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) where mzero = ArrowMonad zeroArrow ArrowMonad x `mplus` ArrowMonad y = ArrowMonad (x <+> y)

Thanks I modified the patch accordingly and created a ticket for this proposal: http://hackage.haskell.org/trac/ghc/ticket/5627 Bas

+1
On Fri, Nov 11, 2011 at 12:57 PM, Bas van Dijk
Thanks I modified the patch accordingly and created a ticket for this proposal:
http://hackage.haskell.org/trac/ghc/ticket/5627
Bas
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries

participants (4)
-
Bas van Dijk
-
Edward Kmett
-
Paterson, Ross
-
Yitzchak Gale