The multiple definitions of
apply can be pretty confusing for beginners (at least it was for me), and now it’s a bit awkward when referring to
apply in documentation, since I feel like additional clarification is often needed.
Control.Apply apply :: forall f a b. Apply f => f (a -> b) -> f a -> f b <*>
Data.Function apply :: forall a b. (a -> b) -> a -> b $
It also seems like it would be easier to remember the infix notation if
<*> was swapped with
<$>, although that would be a departure from Haskell. I guess Haskell doesn’t have this issue with overlapping function names, since it just defines these infix operators without a named function.
One way to add clarity is to rename
apply to something like
noParens. It seems like only the infix operator is used (and exported by
Prelude), so changing the underlying function name wouldn’t be too annoying of a breaking change.