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
[EMAIL PROTECTED]                [EMAIL PROTECTED]
------------------------------------------------------------------



_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to