#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
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to