Fix optSemi type in Parser.y
The definition of optSemi
claimed it had type
([Located a],Bool)
Note that its production actually returns ([Located a],Bool)
:
: ';' { ([$1],True) } -- $1 :: Located Token
Due to an infelicity in the implementation of happy -c
, it effectively resulted in unsafeCoerce :: Token -> a
. See https://github.com/simonmar/happy/pull/134
If any consumer of optSemi
tried to instantiate a
to something not representationally equal to Token
, they would experience a segfault.
In addition to that, this definition made it impossible to compile Parser.y
without the -c
flag (as it's reliant on this bug to cast Token
to forall a. a
).