"A higher type type must be included"

In the following code (from 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] } 

I see the following warning:

 [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[_]] { 

What's going on here? Note that I read this post but did not understand it.

+6
source share
2 answers

See the document for higherKinds .

Only where this flag is enabled, types of a higher type can be written.

The level of abstraction implied by these design patterns is often a barrier to understanding newcomers to the Scala codebase.

For some reason, no one was joking:

Higher type types in Scala lead to a system of type Turing-complete, where compiler termination is no longer guaranteed.

... although often it just ends in failure.

It's just a joke.

+9
source

If you want to suppress this warning, just add to your import section:

 import scala.language.higherKinds 
+2
source

All Articles