“应启用更高的金属类型”警告

时间:2014-02-08 05:18:26

标签: scala

在以下代码中(来自Functional Programming in Scala):

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

trait Monad[F[_]] {
  def unit[A](a: => A): F[A]
  def flatMap[A,B](ma: F[A])(f: A => F[B]): F[B]
  def apply[A](a: => A): F[A]
}

我看到以下警告:

[warn] C:\...\Monad.scala:3: higher-kinded type should be enabled
[warn] by making the implicit value scala.language.higherKinds visible.
[warn] This can be achieved by adding the import clause 'import scala.language.higherKinds'
[warn] or by setting the compiler option -language:higherKinds.
[warn] See the Scala docs for value scala.language.higherKinds for a discussion
[warn] why the feature should be explicitly enabled.
[warn] trait Functor[F[_]] {
[warn]               ^
[warn] C:\...\Monad.scala:7: higher-kinded type should be enabled
[warn] by making the implicit value scala.language.higherKinds visible.
[warn] trait Monad[F[_]] {

这里发生了什么?请注意,我已阅读此post,但不理解。

2 个答案:

答案 0 :(得分:9)

请参阅higherKinds的文档。

  

只有在启用此标志的位置,才能写入更高级别的类型。

     

这些设计模式所隐含的抽象级别通常是一个   理解Scala代码库新手的障碍。

出于某种原因,没有人开玩笑说:

  

Scala中更高级的kinded类型导致图灵完整类型系统,   其中不再保证编译器终止。

......虽然它经常会在崩溃的早期终止。

那只是个玩笑。

答案 1 :(得分:4)

如果您想取消此警告,只需添加到导入部分:

import scala.language.higherKinds