Skip to content

Haskell: local variables in Printer may clash with printing functions #337

Closed
@andreasabel

Description

@andreasabel
M. Main ::= Prt;
P. Prt  ::= Integer;

The generated printer does not compile:

[4 of 6] Compiling PrintTest        ( PrintTest.hs, PrintTest.o )

PrintTest.hs:110:43: error:
     Couldn't match expected type t0 -> AbsTest.Prt -> Doc
                  with actual type AbsTest.Prt
     The function prt is applied to two arguments,
      but its type AbsTest.Prt has none
      In the expression: prt 0 prt
      In the first argument of concatD, namely [prt 0 prt]
    |
110 |     AbsTest.M prt -> prPrec i 0 (concatD [prt 0 prt])
    |                                           ^^^^^^^^^

The problem is that the constructor arguments are lowercase versions of the argument types, e.g. Prt gives prt, which is the name of the printing function.

A solution is to prefix the local variables with an underscore.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions