给出类型错误的Haskell的类型同义词

给出类型错误的Haskell的类型同义词,haskell,types,ghci,Haskell,Types,Ghci,我正在尝试创建一个类似以下内容的类型同义词: data Result = Either String [Token] 我遇到了困难,因为在编译这段代码时,当我尝试使用[Token]创建结果时,haskell会抱怨 Not in scope: data constructor `Result' 我如何定义一个类型同义词和一个有效的构造函数 我认为您需要使用类型而不是数据 您如何尝试创建结果?? 正确的方法是: 如果将其声明为数据: data Result = Result (Eithe

我正在尝试创建一个类似以下内容的类型同义词:

data Result = Either String [Token]
我遇到了困难,因为在编译这段代码时,当我尝试使用[Token]创建结果时,haskell会抱怨

    Not in scope: data constructor `Result'
我如何定义一个类型同义词和一个有效的构造函数

我认为您需要使用类型而不是数据


您如何尝试创建
结果
?? 正确的方法是:

如果将其声明为
数据

data Result = Result (Either String [Token])

f :: Result
f = (Result (Left "test"))
或者,如果您声明为
类型

type Result = Either String [Token]

f :: Result
f = Left "test"

数据构造函数是

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

data Either a b = Left a | Right b

Result
声明为具有一个双参数构造函数,
类型

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

这是a)可能不是您想要的,b)令人困惑,因为
或者
都是众所周知的类型构造函数。

True。为了完成回答,在定义新数据类型时,还需要指定构造函数。使用
data
您的声明将是
data Result=Result(String[Token])
,它不是类型同义词,与标准库(Prelude)中定义的类型
或a b
无关。我使用类似于f=Result(Right tokens)的语句创建,其中Token是[Token]标记。我的问题是,当我不需要的时候,我把“结果”放进去了。谢谢你的帮助!
data Either a b = Left a | Right b
data Result = Either String [Token]
Either :: String -> [Token] -> Result