[Haskell-cafe] Getting the x out

Jake McArthur jake.mcarthur at gmail.com
Wed Apr 22 15:36:48 EDT 2009

michael rice wrote:
> Got it! I figured there must be some way to unpack it.

If you peek at the thread about getting a value out of IO [1], you will 
see some similarities. If you look at my response [2], you will see that 
the functions I suggested for IO are exactly the same as the functions 
you may want to consider for this case!

fmap, liftA, liftM, (<$>) :: Functor f => (a -> b) -> (f a -> f b)
(<*>), ap :: Applicative f => f (a -> b) -> (f a -> f b)
(=<<) :: Monad m => (a -> m b) -> (m a -> m b)

So, for Maybe, you have:

(<$>) :: (a -> b) -> (Maybe a -> Maybe b)
(<*>) :: Maybe (a -> b) -> (Maybe a -> Maybe b)
(=<<) :: (a -> Maybe b) -> (Maybe a -> Maybe b)

You will find that a *lot* of the functions you learn in Haskell are 
actually very general, and once you internalize what they *really* do, 
you will suddenly have entire classes of problems solved by just a few 

- Jake

[1] http://www.haskell.org/pipermail/haskell-cafe/2009-April/059834.html
[2] http://www.haskell.org/pipermail/haskell-cafe/2009-April/059852.html

More information about the Haskell-Cafe mailing list