Safe Haskell | Safe-Inferred |
---|---|

Language | Haskell2010 |

Commute such that constants are the first arguments. Consider:

- equalsInteger 1 x
- equalsInteger x 1

We have unary application, so these are two partial applications:

- (equalsInteger 1) x
- (equalsInteger x) 1

With (1), we can share the `equalsInteger 1` node, and it will be the same across any place where we do this.

With (2), both the nodes here include x, which is a variable that will likely be different in other
invocations of `equalsInteger`

. So the second one is harder to share, which is worse for CSE.

So commuting `equalsInteger`

so that it has the constant first both a) makes various occurrences of
`equalsInteger`

more likely to look similar, and b) gives us a maximally-shareable node for CSE.

This applies to any commutative builtin function that takes constants as arguments, although we
might expect that `equalsInteger`

is the one that will benefit the most.
Plutonomy only commutes `EqualsInteger`

in their `commEquals`

.

# Documentation

commuteFnWithConst ∷ t ~ Term tyname name uni DefaultFun a ⇒ t → t Source #