2

最近、この Scalaz コードに出くわしました (例: 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
    }

「Functor」内の型式、つまり λ[α => F[G[α]]] の意味/目的は何ですか? ソファ、私はhttp://like-a-boss.net/2014/09/27/type-lambda-in-scala.htmlのような型エイリアスを見てきました

new Functor[A, ({ type Alias[A] = Tuple2[X, A]})#Alias]

また、Intellij Idea (14.0.3) はシンボルを解決できません。Intellij の外部で sbt によってビルドされ、Intellij にインポートされた Scalaz。どのような場合に考えられますか?

4

1 に答える 1

4

この構文は、kind-projectorScala プラグインによって有効になります。型ラムダをより簡潔な方法で書くことができます:

Functor[λ[α => F[G[α]]]]

プラグインなしでは、次のようになります。

Functor[({type λ[x] = G[F[x]]})#λ]
于 2015-04-08T19:12:07.307 に答える