Skip to content

Maybe AList confuses representation and limits precise reprinting #231

Open
@raehik

Description

The Fortran AST makes heavy use of the AList type to attach metadata to a list as well as each of its elements. However, it often gets used as Maybe AList to provide an easy out for the empty case (where you could just as well use an empty list inside the AList). This has a few effects:

  • Constructing for the empty list case is easier: Nothing rather than adding all the AList metadata
  • Ambiguous empty representation: both Nothing and Just [] now exist
  • Can't reprint because the Nothing case doesn't store a SrcSpan
  • Can't treat as a plain list without unwrapping the Maybe (results in lots of fromMaybe [])

ALists are essentially a common piece of AST factored out - in particular, they don't map to any one piece of syntax. It would be possible to refactor ALists (or rather, add a bunch more) so that they store all their relevant syntactic information. e.g. some start with ,, some may not be bracketed when empty. That way, the type tells us more, and the pretty printing and reprinting typeclass instances can be simplified.

A sketch would be:

data AListX ext t a = AListX a SrcSpan [t a] ext

where ext would be instantiated as a Bool-like (e.g. data Brackets = Brackets | OmitBrackets) or something else.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions