Open
Conversation
Collaborator
Author
|
To reviewers: The changes to LambdaLifter.hs ended up in this PR by mistake; the changes there were done in preparation for an entirely different purpose (removal of classes generation in lambda-lifting). These changes are innocent but should be removed from this PR, but I leave it to run the tests as I must do other things now. |
nordlander
approved these changes
Apr 14, 2026
Contributor
nordlander
left a comment
There was a problem hiding this comment.
I support this -- go!
(Assuming the changes to LambdaLifter.hs are moved to some other branch!)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This PR implements forced unwrapping and should complete #1859.
We take the approach to parse the postfix operator ! as yet an alternative trailer in atomic expressions, together with ? and indexing, slicing, selection and calls. The operators ! and ? are thus interchangable and expect an expression of optional type as left operand and a sequence of trailers as right operand. It is debatable how useful it is to mix ! and ? in the same sequence, but the following is valid code:
Note that for a successful sequence of operations, the last ?/! operator decides the type of the result. For a failed operation (None encountered in one !/? operation), the failing operation decides the effect: ? gives a None result and ! raises a ValueError.