[Haskell-cafe] MonadPlus m = Maybe a - m a

2012-07-28 Thread Thiago Negri
I'm solving this exercise:
http://www.haskell.org/haskellwiki/All_About_Monads#Exercise_4:_Using_the_Monad_class_constraint

I'm missing a function to transform a Maybe a into a MonadPlus m = m a.
I did search on Hoogle with no luck.

There is no standard definition for the g function I'm defining?

My take on the exercise:

data Sheep = Sheep {
mother :: Maybe Sheep,
father :: Maybe Sheep,
name :: String }

instance Show Sheep where -- for testing
show = name

g :: (MonadPlus m) = Maybe a - m a
g Nothing = mzero
g (Just a) = return a

mother' :: (MonadPlus m) = Sheep - m Sheep
mother' = g . mother

father' :: (MonadPlus m) = Sheep - m Sheep
father' = g . father

parent'' :: (MonadPlus m) = Sheep - m Sheep
parent'' s = mother' s `mplus` father' s

grandparent'' :: (MonadPlus m) = Sheep - m Sheep
grandparent'' s = parent'' s = parent''

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] MonadPlus m = Maybe a - m a

2012-07-28 Thread Alexander Solla
On Sat, Jul 28, 2012 at 8:00 AM, Thiago Negri evoh...@gmail.com wrote:

 I'm solving this exercise:

 http://www.haskell.org/haskellwiki/All_About_Monads#Exercise_4:_Using_the_Monad_class_constraint

 I'm missing a function to transform a Maybe a into a MonadPlus m = m a.
 I did search on Hoogle with no luck.

 There is no standard definition for the g function I'm defining?


g :: (MonadPlus m) = Maybe a - m a
 g Nothing = mzero
 g (Just a) = return a


I doubt there is a standard named function for this, since conversions
between monads are typically not unique and there are lots and lots of
pairs of monads you can convert between.

You can define g in terms of Data.Maybe.maybe as:

g = maybe mzero return
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe