Function composition is not higher-rank
Motivation
The $
operator is capable of applying things while preserving their forall
-qualifiers.
This allows us to do the following:
type Rule = forall a. Something a
bar :: Rule -> Rule
qux :: Rule -> Rule
foo :: Rule -> Rule
foo x = bar $ qux x
However, the .
operator is not, so we can't transform the expression above into:
foo = bar . qux
Proposal
Let make .
as polymorphic, as $
is.