2015-09-28 11 views
9

今日、私はからGADTsについて学ぶために始めました。私は例からコードを実行した場合、私は次のエラーを取得する:ハスケルでどのようにGADTを許可しますか?残念ながら、私はそれらを使用する方法がわからない<a href="https://downloads.haskell.org/~ghc/6.6.1/docs/html/users_guide/gadt.html">haskell.org</a>と</p> <p><a href="https://wiki.haskell.org/GADTs_for_dummies">https://wiki.haskell.org</a>:

[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> 

これは私が使用していますコードです:

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) 

私は他のサンプルコードを試してみましたが、これは私に同じエラーを与えます。 GADTをどのように許可しますか?

+2

コンパイラオプションまたはプラグマを使用します。 https://downloads.haskell.org/~ghc/7.8.2/docs/html/users_guide/ghc-language-features.html#options-language –

答えて

10

Use GADTS to allow GADTSは野生に見える:)

は、基本的には言語拡張を有効にするには2つの方法があります。例えば

  • パスghcから-X<extensions>は、 ghc -XGADTS

  • {-# LANGUAGE <extension> #-}をファイルの先頭に付けます。

{-# LANGUAGE GADTs #-}は、最初のエラーメッセージは、そのように見えた:Use -XGADTs to allow GADTsが、実際には言語のプラグマ(第二の方法)は、より一般的であり、人々はコピー-N-ペーストする拡張名をエラーからハードであることを文句を開始しましたメッセージなので、-Xは削除されました。

+8

'{ - #LANGUAGE GADTs# - } 'のアプローチは次のとおりです。それはソースを読んでいる人がすぐにどのエクステンションが再生されているかをすぐに見ることができるからです。 – dfeuer

+0

@dfeuer私は同意します。実際それがより一般的な理由です。 – Yuras

+0

ありがとうございます。 – maffh

関連する問題

 関連する問題