Scalaz Functor typeclass special symbols

为君一笑 提交于 2019-12-19 10:29:20

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!