我正在尝试创建一个看起来像这样的类型同义词:
data Result = Either String [Token]
我遇到了困难,因为当此代码编译时,当我尝试使用 [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
有一个双参数构造函数,Either
类型为
Either :: String -> [Token] -> Result
这 a) 可能不是您想要的,b) 令人困惑,因为Either
它是一个众所周知的类型构造函数。
我认为您需要使用类型而不是数据
type Result = Either String [Token]