CakeML/cakeml

astPP doesn't print algebraic datatype correctly

Open

#480 opened on Apr 6, 2018

View on GitHub
 (7 comments) (0 reactions) (0 assignees)Standard ML (98 forks)auto 404
dev experiencehelp wantedlow reward

Repository metrics

Stars
 (1,169 stars)
PR merge metrics
 (PR metrics pending)

Description

Hi,

With the following datatype:

datatype 'a misc_app_list =
   Nil
|  Append of  'a misc_app_list *  'a misc_app_list
|  List of  'a list;

Here's an example of what is produced:

(Append(Append(v2,List([", "])),v5 v1))

I.e:

(Append
  (Append
    (v2,
     List([", "])
    ),
    v5 v1
  )
)

When it should be:

(Append
  (Append
    (v2)
    ( List([", "]) )
  )
  ( v5 v1 )
)

Shortly, Append x y is printed as Append (x, y) instead of Append (x) (y). My guess is that it's printed by the same function than the one used to print lists or things like:

case  v3 of 
   (v2,v1) => (* <- this *)

To fix this, it should not print a , but ) ( between things.

It's working for the constructor List, but I think it's because it takes only one argument, so the bug doesn't show.

Contributor guide