0

次のような型シノニムを作成しようとしています。

data Result = Either String [Token]

このコードのコンパイル中に [トークン] を使用して結果を作成しようとすると、haskell が不平を言うため、問題が発生しています。

    Not in scope: data constructor `Result'

機能するコンストラクターで型シノニムを定義するにはどうすればよいですか?!

4

3 に答える 3

6

どのように作成しようとしていますResultか?正しい方法は次のとおりです。

あなたがそれをdata:として宣言した場合

data Result = Result (Either String [Token])

f :: Result
f = (Result (Left "test"))

または、次のように宣言した場合type

type Result = Either String [Token]

f :: Result
f = Left "test"
于 2011-11-07T22:33:55.377 に答える
4

type Result = Either String Token

データコンストラクターは

Left :: String -> Result
Right :: [Token] -> Result

なぜなら

data Either a b = Left a | Right b

data Result = Either String [Token]

タイプ Resultが1つの2引数コンストラクターを持つことを宣言しますEither

Either :: String -> [Token] -> Result

これは、a)おそらくあなたが望むものではなく、b)Eitherよく知られている型コンストラクターであるため、混乱を招きます。

于 2011-11-07T22:34:07.850 に答える
0

データではなくを使用する必要があると思います

type Result = Either String [Token] 
于 2011-11-07T22:25:26.357 に答える