5

我已经启用了 kind 编译器插件addCompilerPlugin("org.spire-math" % "kind-projector" % "0.9.6"),我现在可以使用?符号,例如Map[String, ?],但是 Lambda 和 λ 没有解析。

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

产生Error: not found: value λ. kind 编译器仍然支持 λ 吗?

4

2 回答 2

4

首先,只是提醒人们应该添加

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

build.sbt例如to而不是 to 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

于 2018-02-13T21:42:53.760 回答
0

我刚刚通过快速rm -rf ./target重启一切解决了这个确切的问题(感觉不是第一次)。

我还删除了我的 ensime 项目缓存,只是为了确保——大概对 IntelliJ 做同样的事情也是一个好主意。

于 2018-09-24T17:44:26.863 回答