
Hey, I am currently reading "All about monads". Unfortanlty I have only a pdf without the solutions to the exercises. in the previous exercises I defined: data Sheep = Sheep (Maybe Sheep) (Maybe Sheep) father :: Sheep -> Maybe Sheep father (Sheep f m) = f mother :: Sheep -> Maybe Sheep mother (Sheep f m) = m parent :: Sheep -> Maybe Sheep parent s = (mother s) `mplus` (father s) parentList :: Sheep -> [Sheep] parentList s = (maybeToList (mother s)) `mplus` (maybeToList (father s)) Now I am supposed to combine "parent" and "parentList" to a function parent :: MonadPlus m => Sheep -> m Sheep Problem, my parent function relies on "mother" and "father", and they give a Maybe monad. So I need: mother :: MonadPlus m => Sheep -> m Sheep do I not? But I have no Idea of how the body of this function would look. Anyone can give me a hint? Thanks! Nathan but what I really need, is a function