[Haskell] A question about a possible bug in GHC regarding GADTs and type classes

Simon Peyton-Jones simonpj at microsoft.com
Thu Jan 18 04:57:14 EST 2007


[redirecting to ghc-users]

This code works with the HEAD, where I recently fixed the interaction between GADTs and type classes.  You'll need to use a HEAD compiler (not 6.6) though.

Someone else may help you with the TyRange stuff; I'm just referring to the Num constraint in your data type.

Simon

| -----Original Message-----
| From: haskell-bounces at haskell.org [mailto:haskell-bounces at haskell.org] On Behalf Of Pablo Nogueira
| Sent: 17 January 2007 15:36
| To: haskell at haskell.org
| Subject: [Haskell] A question about a possible bug in GHC regarding GADTs and type classes
|
| Hi,
|
| I've been told the following short code is correct but it's GHC's
| fault it does not type check.
| Is that the case?
|
| --
| {-# OPTIONS -fglasgow-exts #-}
|
| -- An expression GADT:
|
| data Exp :: * -> * where
|   LitNum  :: Num a => a -> Exp a
|   LitBool  :: Bool -> Exp Bool
|   Plus      :: Num a => Exp a -> Exp a -> Exp a
|   And       :: Exp Bool -> Exp Bool -> Exp Bool
|   If           :: Exp Bool -> Exp a -> Exp a -> Exp a
|
| -- An expression evaluator:
|
| evalExp :: Exp a -> a
| evalExp (LitNum i)  = i
| evalExp (LitBool b) = b
| evalExp (Plus x y)  = evalExp x + evalExp y
| evalExp (And  x y)  = evalExp x && evalExp y
| evalExp (If c t e)  = if (evalExp c) then (evalExp t) else (evalExp e)
| --
|
| The type checker complains that evalExp needs a Num constraint on its
| type signature.
| This can't be right, for Bool is not an instance of Num, right?
|
| Is it the case that the interaction between GADTs and type classes is
| not fully worked out yet?


More information about the Glasgow-haskell-users mailing list