找不到种类编译器插件λ

时间:2018-02-13 12:56:03

标签: scala type-kinds kind-projector

我启用了种类编译器插件addCompilerPlugin("org.spire-math" % "kind-projector" % "0.9.6"),我现在可以使用?符号,例如Map[String, ?]然而Lambda和λ没有得到解决。

val f: Id ~> Future = λ[Id ~> Future](...)

生成Error: not found: value λ。是否仍然支持种类编译器?

2 个答案:

答案 0 :(得分:2)

首先,提醒一下应该添加

addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.6")

build.sbt,而不是plugins.sbt

然后,例如,

import scala.language.higherKinds

trait MyTrait[F[_]]

类型为lambda的声明

class MyClass extends MyTrait[({ type l[A] = Map[String, A] })#l]

可以替换为

class MyClass extends MyTrait[Map[String, ?]]

class MyClass extends MyTrait[λ[A => Map[String, A]]]

class MyClass extends MyTrait[Lambda[A => Map[String, A]]]

我不确定是否

val f: Id ~> Future = λ[Id ~> Future](???)

是一种有效的语法。

~>通常用于

中的自然变换
import cats.{Id, ~>}
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val f: Id ~> Future = new (Id ~> Future) {
  override def apply[A](fa: A): Future[A] = Future(fa)
}

而不是类型lambdas。

更新。好吧,它是多态lambda https://github.com/typelevel/kind-projector#polymorphic-lambda-values

答案 1 :(得分:0)

通过快速rm -rf ./target并重新启动所有内容,我才刚刚解决了这个确切的问题(这不是第一次)。

我还删除了我的ensime项目缓存,以确保-大概对IntelliJ进行同样的操作也是个好主意。