次のような型シノニムを作成しようとしています。
data Result = Either String [Token]
このコードのコンパイル中に [トークン] を使用して結果を作成しようとすると、haskell が不平を言うため、問題が発生しています。
Not in scope: data constructor `Result'
機能するコンストラクターで型シノニムを定義するにはどうすればよいですか?!
どのように作成しようとしています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"
と
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
よく知られている型コンストラクターであるため、混乱を招きます。
データではなく型を使用する必要があると思います
type Result = Either String [Token]