I believe you have already answered this question, but why is the method for "function-like" types is called invoke() instead of apply()? This seems like it has become an established naming convention, since not only Scala, but also Java 8 used it for Function<T,U> types.
Thanks!