RFC: Generalised dot syntax for postfix application#342
Open
ziman wants to merge 5 commits intoedwinb:masterfrom
Open
RFC: Generalised dot syntax for postfix application#342ziman wants to merge 5 commits intoedwinb:masterfrom
ziman wants to merge 5 commits intoedwinb:masterfrom
Conversation
Collaborator
|
I have a love/hate relationship with this proposal. But mostly love. |
Collaborator
Author
|
If we do this, we should tell the elaborator not to generalise names after dots to avoid |
Collaborator
|
I expect |
Owner
|
I'm a bit scared of this one, although I do kind of like it... I think... maybe if we are going to have it, it should be hidden behind a I think we've overdone syntactic trickery and experimentation in the past, but somehow I still want to play with this... |
Contributor
|
I'll feel a bit awkward if they're identical:
|
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.
Here's a more radical idea:
.(expr) and .nameare postfix applications ofexpr/namethat bind tighter than application.Some examples:
printLn user.name.length"hello".length.(+3).printLnmap (.length.show) ["foo", "booo"]mySet.(insert "hello").(insert "world") <+> otherSet5 .div 35 .(div {ty=Int}) 3foo .(NS.(>>=) {lin = True}) barThis patch did not require any changes to the existing code in the stdlib and tests (other than the recent record test).
One issue I see with this is that idiomatic functions put the main arguments last so you can't write
myList.map (+1)and you have to writemyList.(map (+1))instead. There ismyList.for printLnbut that works only inApplicativecontexts.