问题
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?
回答1:
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