On Dec 21, 2007 2:38 PM, Jules Bean <[EMAIL PROTECTED]> wrote: > David Menendez wrote: > >> That's a reasonable thing to assume. It just happens that Haskell > > doesn't work that way. There's an asymmetry between constructing and > > pattern-matching, and it's one that many people have complained about. > > With GADTs turned on (-XGADTS in 6.8, -fglasgow-exts in 6.6) pattern > matchings will give rise to class contexts as you would naively expect. > > Contexts on constructors aren't actualy haskell98, it is a bug that GHC > 6.6 accepts them without any extensions being activated. Or that's my > understanding, see http://hackage.haskell.org/trac/ghc/ticket/1901
I think I saw [1] and just mentally substituted [2]. In fact, until just now I didn't know [1] was even possible. (Wasn't there some problem with class contexts in GADTs?) [1] data SquareType a = (Num a) => SquareConstructor a [2] data (Num a) => SquareType a = SquareConstructor a Okay, so pattern-matching in case [1] does guarantee Num a. In that case, the original code didn't work because it was trying to unify Int with an arbitrary instance of Num. -- Dave Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/>
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe