All pastes #814025 Raw Edit

Mine

public text v1 · immutable
·published 2007-12-12 23:14 UTC
rendered paste body
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