Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support promoted type applications. #376

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

ChickenProp
Copy link
Contributor

Closes #370.

Up to GHC 8.10,

foo @ 'Bar

was a valid type application. In GHC 9 it's not, which means brittany needs to allow

foo @'Bar

which it now does.

The reason the space was needed was to allow a promoted type variable at the head of a type-level list. That is,

'['Foo]

is invalid syntax, because it initially parses as the character '['. So the promoted type variable was always given a separator at the beginning, and we'd get

'[ 'Foo]

which was valid. Now we handle this case by specifically examining the head of a type-level list; if it's promoted we introduce spaces, so

'[ 'Foo ]
'[Foo]

I've added tests for this and some related cases. In doing so I noticed that unnecessary spaces get added in front of commas in these lists; I believe that's a separate bug, and I've written a comment explaining why it happens, but I haven't tried to fix it.

I'm not sure when the first alternates in the FirstLastSingleton and FirstLast branches would ever be hit, so I'm not entirely sure if the separators are necessary there. But since docSeparator disappears at the end of a line and merges with adjacent separators, they should be harmless.

Closes lspitzner#370.

Up to GHC 8.10,

    foo @ 'Bar

was a valid type application. In GHC 9 it's not, which means brittany
needs to allow

    foo @'Bar

which it now does.

The reason the space was needed was to allow a promoted type variable at
the head of a type-level list. That is,

    '['Foo]

is invalid syntax, because it initially parses as the character `'['`.
So the promoted type variable was always given a separator at the
beginning, and we'd get

    '[ 'Foo]

which was valid. Now we handle this case by specifically examining the
head of a type-level list; if it's promoted we introduce spaces, so

    '[ 'Foo ]
    '[Foo]

I've added tests for this and some related cases. In doing so I noticed
that unnecessary spaces get added in front of commas in these lists; I
believe that's a separate bug, and I've written a comment explaining why
it happens, but I haven't tried to fix it.

I'm not sure when the first alternates in the `FirstLastSingleton`
and `FirstLast` branches would ever be hit, so I'm not entirely sure if
the separators are necessary there. But since `docSeparator` disappears
at the end of a line and merges with adjacent separators, they should be
harmless.
ChickenProp added a commit to ChickenProp/brittany that referenced this pull request Nov 17, 2022
This is lspitzner#376 backported so we
can use it on GHC 8.10.7.

Backporting the tests would have been a hassle so I didn't bother.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Brittany introduces space in TypeApplications with ticked-constructor
1 participant