The definition of parent in the List monad is very
similar to the definition in the Maybe monad. The only difference is
the need to convert the values returned by mother and
father from the Maybe monad to the List monad using the
Maybe.maybeToList function.
| Code available in exercise3.hs |
|---|
parent :: Sheep -> [Sheep] parent s = (maybeToList (mother s)) `mplus` (maybeToList (father s)) |
Unlike our definition of grandparent in the Maybe monad,
we can use the simpler form in the List monad since the List
monad does implement a backtracking strategy:
| Code available in exercise3.hs |
|---|
grandparent :: Sheep -> [Sheep]
grandparent s = do p <- parent s
parent p
|