There is a problem with unique type variables in some bindings when generating Core.

I found the error in Text/ParserCombinators/ReadP.hcr (generated with the -O0 flag).


The error occurs at line 825 in ReadP.hcr:

-----
%case ds %of (wild::GHCziBase.ZMZN GHCziBase.Char)
{GHCziBase.ZC
(c::GHCziBase.Char) (cs::GHCziBase.ZMZN GHCziBase.Char) ->
zddmzgzg @ GHCziBase.Char @ (GHCziBase.ZMZN GHCziBase.Char)
(TextziParserCombinatorsziReadP.char c) (scan cs);
-----



If we look at the definition of zddmzgzg, line 732, we see what the problem is:

-----
zddmzgzg :: %forall a b . (%forall b . (a ->
TextziParserCombinatorsziReadP.P b)
-> TextziParserCombinatorsziReadP.P b)
->
(%forall b . (b -> TextziParserCombinatorsziReadP.P b) ->
TextziParserCombinatorsziReadP.P b)
->
%forall b . (b -> TextziParserCombinatorsziReadP.P b) ->
TextziParserCombinatorsziReadP.P b = ...
-----


The second time b is bound it shadows the first binding. Maybe there is a missing tidyType on the binding types?


If we at line 54 in ReadP.hs change
newtype ReadP a = R (forall b . (a -> P b) -> P b)
to
newtype ReadP a = R (forall z . (a -> P z) -> P z)
we get the correct type definition in the generated Core code:

-----
zddmzgzg :: %forall a b . (%forall zz . (a ->
TextziParserCombinatorsziReadP.P zz)
-> TextziParserCombinatorsziReadP.P zz)
->
(%forall zz . (b -> TextziParserCombinatorsziReadP.P zz) ->
TextziParserCombinatorsziReadP.P zz)
->
%forall zz . (b -> TextziParserCombinatorsziReadP.P zz) ->
TextziParserCombinatorsziReadP.P zz = ...
-----


This problem can also be found in Lex.hcr at line 1479.



Sincerely,
Tobias

_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to