相关疑难解决方法(0)

Scala更高的kinded类型方差

我正在用更高级的类型浸泡我的脚趾,探索一个非常基本的Scala示例:

trait Mappable[F[_]] {
  def map[A, B](fa: F[A])(f: A => B): F[B]
}

object Mappable {
  implicit object MappableOption extends Mappable[Option] {
    def map[A, B](fa: Option[A])(f: A => B): Option[B] = fa.map(f)
  }
  implicit object MappableSeq extends Mappable[Seq] {
    def map[A, B](fa: Seq[A])(f: A => B): Seq[B] = fa.map(f)
  }
}

def bananaTuple[F[_], T](f: F[T])(implicit F: Mappable[F]): F[(String, T)] =
  F.map(f)(("banana", _))
Run Code Online (Sandbox Code Playgroud)

这有效:

bananaTuple(Option(42)) // Some((banana,42))
bananaTuple(Seq(42))    // List((banana,42))
Run Code Online (Sandbox Code Playgroud)

但这不编译:

bananaTuple(Some(42))
bananaTuple(List(42))
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误:

could not find implicit value for parameter …
Run Code Online (Sandbox Code Playgroud)

scala higher-kinded-types

5
推荐指数
1
解决办法
367
查看次数

标签 统计

higher-kinded-types ×1

scala ×1