2014-02-08 7 views
6

Im folgenden Code (von Functional Programming in Scala):"Higher Kinded Typ aktiviert werden soll" Warnung

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] 
} 

ich die folgende Warnung sehen:

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

Was ist hier los? Beachten Sie, dass ich diese post gelesen habe, aber nicht verstanden habe.

+0

See [SIP-18 - Modularisierung Sprache Features] (http://docs.scala-lang.org/sips/ completed/modularizing-language-features.html). – senia

Antwort

9

Siehe das Dokument für higherKinds.

Nur wo dieses Flag aktiviert ist, können höherwertige Typen geschrieben werden.

Das Abstraktionsniveau dieser Entwurfsmuster ist oft eine Barriere für das Verständnis für Neulinge in einer Scala Codebasis.

Aus irgendeinem Grund hat niemand scherzte über:

Höhere kinded Typen in Scala zu einem Typ-System führen Turing-complete, wo Compiler Kündigung nicht mehr gewährleistet.

... obwohl es oft nur früh mit einem Absturz endet.

Das ist nur ein Witz.

+0

Danke, @ som-snytt. Ist der 'Compiler-Abbruch nicht mehr garantiert' ein Scherz? –

+0

Interessant: die [Qi] (https://en.wikipedia.org/wiki/Qi_ (Programmiersprache)) Sprache (und einige ihrer [Spinoffs] (https://en.wikipedia.org/wiki/Shen_ (programing_language))) ist bekannt, dass ein Turing-System vollständig (und damit leistungsfähig per Definition möglich) ist - bietet Scala dann ein äquivalent starkes (aber vielleicht nicht so knapp aussagekräftiges) Typsystem an? –

+0

doc führt zu einem toten Link. – javadba

2

Wenn Sie diese Warnung zu unterdrücken, fügen Sie einfach in Ihren Import Abschnitt:

import scala.language.higherKinds 
Verwandte Themen