Recently I have come across this Scalaz code (e.g. https://github.com/scalaz/scalaz/blob/series/7.2.x/core/src/main/scala/scalaz/Functor.scala):
def compose[G[_]](implicit G0: Functor[G]): Functor[λ[α => F[G[α]]]] =
new CompositionFunctor[F, G] {
implicit def F = self
implicit def G = G0
}
What is the meaning/purpose of the type expression inside the "Functor", i.e. λ[α => F[G[α]]]? Sofar, I have seen just type aliases like e.g. in http://like-a-boss.net/2014/09/27/type-lambda-in-scala.html
new Functor[A, ({ type Alias[A] = Tuple2[X, A]})#Alias]
Also, Intellij Idea (14.0.3) cannot resolve the symbol. Scalaz built by sbt outside Intellij and then imported into Intellij. Any idea what can be the case?
This syntax is enabled by the kind-projector
Scala plugin. It allows to write type lambdas in more concise way:
Functor[λ[α => F[G[α]]]]
Without the plugin it would look like:
Functor[({type λ[x] = G[F[x]]})#λ]
来源:https://stackoverflow.com/questions/29523019/scalaz-functor-typeclass-special-symbols