
Let's say I have: data Tree a = Branch a (Tree a) (Tree a) | Leaf instance Show a => Show (Tree a) where show (Branch datum left right) = show left ++ " <- " ++ show datum ++ " -> " ++ show right show Leaf = "*" y = Leaf x = (Branch 3 Leaf Leaf) Now, "show x" will work, and "show y" won't. How can I write things so that I can show both x and y? I don't seem to be able to write, say, instance Show a => Show (Tree a) where show (Branch datum left right) = show left ++ " <- " ++ show datum ++ " -> " ++ show right instance Show (Tree a) where show Leaf = "*" or, perhaps, instance Show (Tree a) where Show a => show (Branch datum left right) = show left ++ " <- " ++ show datum ++ " -> " ++ show right show Leaf = "*" ...or whatever other things come to mind. -- Mark