Niklas Broberg wrote:
Not nearly as annoying as this:
data Foobar a where
Foo :: X -> Y -> Foobar NoZoo
Bar :: X -> Y -> Foobar NoZoo
Zoo :: Foobar NoZoo -> Foobar Zoo
For some reason, if I do this I get endless type check errors. I have to
change the top two back to Foobar a before it will work. *sigh*
Well, that means something very different obviously. It means Zoo
constructors can never take Zoo arguments.
...which would be precisely what I want, yes. :-)
Why would that give you type check errors? If it
does, you're doing something else wrong.
I think (I'm not sure) it's because of stuff like this:
foobar :: Foobar a -> X
foobar f = case f of
Foo x y -> ...
Zoo g -> foobar g
The first case implies that f :: Foobar NoZoo, while the second implies
that f :: Foobar Zoo. Apparently this seemingly reasonable construct
does not type-check...
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe