2015-09-28 20 views
9

Heute begann ich, über GADTs zu lernen: haskell.org und https://wiki.haskell.orgWie erlauben Sie GADTs in Haskell?

Leider weiß ich nicht, wie man sie benutzt. Wenn ich den Code aus dem Beispiel fahre ich die folgende Fehlermeldung erhalten:

[1 of 1] Compiling Main    (test.hs, interpreted) 

AFP_229.hs:31:1: 
Illegal generalised algebraic data declaration for `Term' 
    (Use GADTs to allow GADTs) 
In the data declaration for `Term' 
Failed, modules loaded: none. 
Prelude> 

Dies ist der Code ich verwende:

data Term a where 
    Lit :: Int -> Term Int 
    Succ :: Term Int -> Term Int 
    IsZero :: Term Int -> Term Bool 
    If  :: Term Bool -> Term a -> Term a -> Term a 
    Pair :: Term a -> Term b -> Term (a,b) 

ich anderen Beispielcode versucht, aber das gibt mir den gleichen Fehler . Wie erlauben Sie GADTs?

+2

Verwenden Sie eine Compileroption oder ein Pragma. https://downloads.haskell.org/~ghc/7.8.2/docs/html/users_guide/ghc-language-features.html#options-language –

Antwort

10

Die Use GADTS to allow GADTS sieht wilde :)

Grundsätzlich gibt es zwei Möglichkeiten, Spracherweiterungen zu aktivieren:

  • Pfad ein -X<extensions>-ghc, z.B. ghc -XGADTS

  • setzen Sie {-# LANGUAGE <extension> #-} an den Anfang einer Datei, z.B. {-# LANGUAGE GADTs #-}

zunächst die Fehlermeldungen sah wie folgt aus: Use -XGADTs to allow GADTs, aber eigentlich Sprache Pragma (der zweite Weg) ist häufiger, und die Leute begannen beschweren, dass es schwer ist, den Fehler zu kopieren-n-Paste Erweiterung Namen von Nachricht, so -X wurde gelöscht.

+8

Der '{- # LANGUAGE GADTs # -}' Ansatz ist so ziemlich immer den Weg zu gehen, weil es Menschen die Quelle lesen sofort sehen, welche Erweiterungen im Spiel sind. – dfeuer

+0

@dfeuer Ich stimme zu. Eigentlich ist es deshalb häufiger. – Yuras

+0

Vielen Dank für Ihre Hilfe. – maffh