# [Haskell-cafe] Getting the x out

michael rice nowgate at yahoo.com
Tue Apr 21 21:07:14 EDT 2009

```Got it! I figured there must be some way to unpack it.

My goodness, there are so many functions I'm not even aware of. Has anyone ever counted them all?

Thanks.

Michael

--- On Tue, 4/21/09, Tony Morris <tonymorris at gmail.com> wrote:

From: Tony Morris <tonymorris at gmail.com>
Subject: Re: [Haskell-cafe] Getting the x out
To: "michael rice" <nowgate at yahoo.com>
Date: Tuesday, April 21, 2009, 8:54 PM

You mean, the x out of *Maybe* x even. In the very literal sense, the
assumption that there is an x in "Maybe x" is false -- there may not be
one since it is maybe, but not necessarily, x. IT's a bit like the use
of null that you might have seen in other languages where you might have
a value or you might have null. What you can do however, is say "give me
the x if there is one, otherwise, use this value".

This is the fromMaybe function.

Prelude Data.Maybe> let safeDivision x y = if y == 0 then Nothing else
Just (x/y)
Prelude Data.Maybe> 3 + (42 `fromMaybe` safeDivision 10 5)
5.0
Prelude Data.Maybe> 3 + (42 `fromMaybe` safeDivision 10 0)
45.0

michael rice wrote:
> How do I get the x out of Just x?
>
> Michael
>
> =============
>
> safeDivision :: Float -> Float -> Maybe Float
> safeDivision x y = if y == 0 then Nothing else Just (x/y)
>
> *Main Data.List> safeDivision 10 5
> Just 2.0
> *Main Data.List> 3 + (safeDivision 10 5)
>
> <interactive>:1:0:
>     No instance for (Num (Maybe Float))
>       arising from a use of `+' at <interactive>:1:0-22
>     Possible fix: add an instance declaration for (Num (Maybe Float))
>     In the expression: 3 + (safeDivision 10 5)
>     In the definition of `it': it = 3 + (safeDivision 10 5)
> *Main Data.List>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
>

--
Tony Morris
http://tmorris.net/

-------------- next part --------------
An HTML attachment was scrubbed...