#5627: Proposal: Add Applicative instances for the remaining monads in base
---------------------------------+------------------------------------------
Reporter: basvandijk | Owner:
Type: feature request | Status: new
Priority: normal | Component: libraries/base
Version: 7.2.1 | Keywords:
Testcase: | Blockedby:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
---------------------------------+------------------------------------------
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.
== Proposal ==
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 Arrow a => Applicative (ArrowMonad a) where
pure x = ArrowMonad (arr (const x))
ArrowMonad f <*> ArrowMonad x = ArrowMonad (f &&& x >>> arr (uncurry
id))
instance ArrowPlus a => Alternative (ArrowMonad a) where
empty = ArrowMonad zeroArrow
ArrowMonad x <|> ArrowMonad y = ArrowMonad (x <+> y)
}}}
And adding the following to `Control.Arrow`:
{{{
instance Arrow a => Functor (ArrowMonad a) where
fmap f (ArrowMonad m) = ArrowMonad $ m >>> arr f
instance (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) where
mzero = ArrowMonad zeroArrow
ArrowMonad x `mplus` ArrowMonad y = ArrowMonad (x <+> y)
}}}
== 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`?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5627>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs