
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

At 4:17 PM -0500 7/31/01, Mark Carroll wrote:
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?
The error was something like this, was it not? Script> show y ERROR - Unresolved overloading *** Type : Show a => [Char] *** Expression : show y The problem is that the context Show a => is not satisfied in the case of y = Leaf because the datum type isn't specified, and therefore is not an instance of Show. Declaring y's type, say y :: Tree () solves the problem: Script> y * --HR ------------------------------------------------------------------ Hamilton Richards, PhD Department of Computer Sciences Senior Lecturer Mail Code C0500 512-471-9525 The University of Texas at Austin Taylor Hall 5.138 Austin, Texas 78712-1188 ham@cs.utexas.edu hrichrds@swbell.net ------------------------------------------------------------------
participants (2)
-
Hamilton Richards
-
Mark Carroll