[Haskell-cafe] A very nontrivial parser
Andrew Coppin
andrewcoppin at btinternet.com
Sun Jul 8 03:21:54 EDT 2007
Jonathan Cast wrote:
> I wouldn't call rank-2 types extremely rare . . .
>
Well now, my parser is annoyingly clunky to use, but it *works*.
However, I just found something where it seems to be *impossible* to
write the necessary code without rank-2 types...
I tried to write this type:
data Encoder2 = Encoder2 {stage1 :: [Word8] -> x, stage2 :: x ->
[Word8] -> [Word8]}
However, that doesn't work. All type variables on the right must appear
on the left:
data Encoder2 x = Encoder2 {stage1 :: [Word8] -> x, stage2 :: x ->
[Word8] -> [Word8]}
Now I have a problem. I want to put several of these puppies into a big
list - and I do *not* want to force the type variable 'x' to be the same
in all cases! (Although one can easily imagine situations where you
might want this.) So as of now, my code uses rank-2 types - despite the
fact that I don't actually know what a rank-2 type *is* yet! o_O This is
rather troubling...
More information about the Haskell-Cafe
mailing list