3

私はhaskellで小さなlispインタプリタを書いているところです。このプロセスでは、型指定の少ない数値を取得するために、このデータ型を定義しました。

data Number = _Int Integer
            | _Rational Rational
            | _Float Double
    deriving(Eq,Show)

これをハグでコンパイルすると、次のエラーで失敗します。

ERROR "types.hs":16-データ型宣言の構文エラー(予期しない `|')

16行目|は、上記のコードの最初の行です。

4

1 に答える 1

13

ハグはここで少し回り道をしています。実際の問題は、|ではなく、コンストラクター名の先頭にあるアンダースコアです。アンダースコアで始めることはできません。コンストラクターが大文字で始まるのは単なる慣例ではなく、Haskellの構文の一部です。

Hugsが「考えている」ことについての私の最も良い推測は、最初のコンストラクターの名前が正しくなかったため、後で別のコンストラクターを提供すると、Hugsは次のように述べています。の上?"

GHCはより明確なエラーを出します:

types.hs:1:14: Not a constructor: `_Int'
于 2010-03-17T23:19:54.137 に答える