Solution1.html
Jump to navigation
Jump to search
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
Note: the return
s are not not necessary; they are only used for the sake of the exercise.
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