Monads and Maybe

Derek Elkins ddarius@hotpop.com
Wed, 20 Aug 2003 06:45:35 -0400


On Tue, 19 Aug 2003 14:09:16 +0100 (BST)
C T McBride <c.t.mcbride@durham.ac.uk> wrote:

> Hi
> 
> > > As an example, I'll use the Maybe monad. Suppose I want to write
> > > code to handle experimental data, in which there might be missing
> > > values. I might then decide to represent measurements by data of
> > > type "Maybe Double", with missing values represented by "Nothing".
> > > I could then go on to define functions on missing values, which
> > > would return "Nothing" when their argument is "Nothing", and I
> > > could string these functions together via the monad mechanism.
> > > Fine.  But how would I handle e.g. addition of two such values?
> > > The result should be "Nothing" when either of its arguments
> > > is"Nothing". Is there any mechanism to handle that?
> >
> > Yes, liftM2. Defined in module Monad (or Data.Monad resp.).
> >
> > > Konrad.
> >
> > Wolfgang
> 
> Or, more generally,
> 
>   infixl 9 <$>
> 
>   (<$>) :: Monad m => m (s -> t) -> m s -> m t
>   mf <$> ms =
>     do f <- mf
>        s <- ms
>        return (f s)

or just liftM2 ($)
or just ap