Optimize arity wrapper for << and >> #1145
Open
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.
Prior to this, << (and similarly >>) would be compiled to
which doesn't match the call sites, which is always of the shape
This change makes it so that composeL/composeR are now wrapped with A2, which improves the performance by about 30%.
Here is the benchmark that I have been using: https://github.com/jfmengels/elm-benchmarks/blob/master/src/WhatIsFaster/FunctionComposition.elm (where I compare
>>and lambdas)Prior to the change:

After the change:

A further improvement to this (not in this PR, and more in the scope of the compiler would be to replacing

A2(composeL, f, g)bycomposeL(f, g):PS: At some point in the past, the Elm compiler turned composition into lambdas, but it removed that in elm/compiler@6ae0168.