【问题标题】:Scalaz Functor typeclass special symbolsScalaz Functor typeclass 特殊符号
【发布时间】:2015-04-08 18:53:06
【问题描述】:

最近我遇到了这个 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
    }

“函子”内的类型表达式的含义/目的是什么,即 λ[α => 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) 无法解析符号。 Scalaz 在 Intellij 外部由 sbt 构建,然后导入 Intellij。知道会是什么情况吗?

【问题讨论】:

    标签: scala intellij-idea scalaz scalaz7 kind-projector


    【解决方案1】:

    kind-projector Scala 插件启用了此语法。它允许以更简洁的方式编写类型 lambda:

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

    如果没有插件,它看起来像:

    Functor[({type λ[x] = G[F[x]]})#λ]
    

    【讨论】:

    • 谢谢,现在我明白了。不幸的是,我似乎被 Intellij 困住了。我发现插件在 Scalaz 的 Project 文件夹中的 Build.scala 中声明为建议的 (github.com/non/kind-projector)。但是,这最终并未反映在 IDE 中。你碰巧有在 Intellij 中设置编译器插件的经验吗?
    • 这基本上意味着不能在 Intellij Idea 中玩/开发 Scalaz。那么,还有哪些 ide/editor 可以使用呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2012-11-12
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多