我正在尝试创建一个类似于此的类型同义词:
data Result = Either String [Token]
我遇到了困难,因为当这段代码编译时,当我尝试用[Token]创建一个Result时,haskell会抱怨
Not in scope: data constructor `Result'
如何使用有效的构造函数定义类型同义词?!
答案 0 :(得分: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"
答案 1 :(得分: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
有一个双参数构造函数,Either
类型为
Either :: String -> [Token] -> Result
这可能不是你想要的而且b)令人困惑,因为Either
是一个众所周知的类型构造函数。
答案 2 :(得分:0)
我认为您需要使用类型而不是数据
type Result = Either String [Token]