[Haskell-cafe] Question on Lexing Haskell syntax

Travis Athougies travis at athougies.net
Tue Oct 31 22:31:34 UTC 2023


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

According to the Haskell report [1] (See Note 5), a virtual `}` token
is inserted if parsing the next token would cause a parse error and the
indentation stack is non-empty.

I'm trying to lex and parse Haskell source and this sort of interplay
(which requires two-way communication between lexer and parser) makes
it very difficult to write a conformant implementation.

I can't change the standard (obviously), but I'm wondering if this is
actually what GHC (de facto the only Haskell compiler) does, or if it
applies some other rule. If so, does anyone know the exact mechanism of
its implementation?

I've been programming Haskell for more than a decade, and while I have
an intuitive understanding of the indentation rules, I would have
assumed the source could be lexed without also having a parser. In
particular, the note seems to imply that the main purpose of this is to
properly lex `let`/`in` bindings. Perhaps there's an alternate
equivalent rule?

Curious to hear other's thoughts.

Travis

[1]
https://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3
-----BEGIN PGP SIGNATURE-----

iIsEARYKADMWIQRW81c55hOCXuY5k/H+BxaRGQDTjQUCZUGARhUcdHJhdmlzQGF0
aG91Z2llcy5uZXQACgkQ/gcWkRkA041W+wEA/7n5NejGTYu4O6N+Pt7Rn0bBRw6D
5D96idagahXqXioA/18hxYFpY45lWwB7pKCh83xQJu2Bcwkxj1xhhCEZBcoA
=FrDy
-----END PGP SIGNATURE-----


More information about the Haskell-Cafe mailing list