
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...