
Henrik Nilsson
I get an error "No instance for (Fractional a) arising from the use of '/'" This seems odd to me, since Div is constrained to have fractional arguments. Is there something obvious I'm missing?
Unless GADTs are handled specially, and I don't think they are in this case, this problem is not specific to GADTs but related to how type constraints on constructors are handled in general. Basically, a constraint on a constructor has no effect beyond beyond constraining what the constructor can be applied to (see the Haskell 98 report 4.2.1). In particular, when you take a constructed value apart through pattern matching, the constraints do not come into play: hence the "no instance" message.
And in case anyone is wondering, you could fix the original program by adding the constraint to the function signature: eval :: Fractional a => Term a -> a although this is likely more constrained than the OP wanted. Regards, Malcolm