Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rather than our
Node
constructors containing[Node]
, they now containNode
in those places, and an additionalNode
sibling. In a sense this is directly embedding Haskell's singly-linked list into our core AST type, hence the addition of theFin
constructor, equivalent to listNil
. Alternative primed constructors are supplied via patterns, so instead ofString x Fin
you can writeString' x
.With this PR alone it's a relatively neutral change, but it enables more powerful recursion schemes in #171.
Additionally an
IsString
instance has been added, which can be backported to the previous AST representation if this PR isn't merged. It transforms"xy"
directly intoChar 'x' (Char 'y' Fin)
(previouslyPlaintext "xy"
).Oh, and with us embracing holding chars rather than strings, we can say goodbye to
mergePlaintext
.Before (with
IsString
sugar):["Hello ", String "name", etc]
After:
mconcat ["Hello", String' "name", etc]