Monads and Maybe

Wolfgang Jeltsch
Tue, 19 Aug 2003 13:01:37 +0200

On Tuesday, 2003-08-19, 12:42, CEST, Konrad Hinsen wrote:
> I have been following the recent "Monad tutorial" discussion with interest,
> and even read the tutorial, which is a useful addition to the existing
> Haskell documentation. So useful in fact that it raises a question...
> The whole monad mechanism seems to geared towards functions of one argument,
> plus eventually state, that get chained together. How about functions with
> several arguments?
> 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.