data Tree a = Leaf a | Node a (Tree a) (Tree a) deriving (Eq,Show)
data Id a = Id a
instance Monad Id where
(>>=) (Id x) f = f x
return = Id
genList :: (Eq a, Show a) => Tree a -> [a] -> Id [a]
genList (Leaf l) names
| contains names l = return names
| otherwise = return (names ++ [l])
genList (Node n l r) names =
do
names2 <- genList (Leaf n) names
names3 <- genList l names2
names4 <- genList r names3
return names4
contains :: (Eq a, Show a) => [a] -> a -> Bool
contains [] x = False
contains (y:ys) x
| x == y = True
| otherwise = contains ys x