给出类型错误的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