Solution1.html
From HaskellWiki
maternalGrandfather :: Sheep -> Maybe Sheep maternalGrandfather s = return s >>= \ms -> mother ms >>= \m -> father m fathersMaternalGrandmother :: Sheep -> Maybe Sheep fathersMaternalGrandMother s = return s >>= \ms -> father ms >>= \f -> mother s >>= \gm -> mother gm mothersPaternalGrandfather :: Sheep -> Maybe Sheep mothersPaternalGrandfather s = return s >>= \ms -> mother ms >>= \m -> father m >>= \gf -> father gf
return
An alternative solution without use of
return
maternalGrandfather :: Sheep -> Maybe Sheep maternalGrandfather s = mother s >>= \m -> father m fathersMaternalGrandmother :: Sheep -> Maybe Sheep fathersMaternalGrandMother s = father s >>= \f -> mother s >>= \gm -> mother gm mothersPaternalGrandfather :: Sheep -> Maybe Sheep mothersPaternalGrandfather s = mother s >>= \m -> father m >>= \gf -> father gf
