0

我正在尝试创建一个看起来像这样的类型同义词:

data Result = Either String [Token]

我遇到了困难,因为当此代码编译时,当我尝试使用 [Token] 创建结果时,haskell 抱怨

    Not in scope: data constructor `Result'

如何使用有效的构造函数定义类型同义词?!

4

3 回答 3

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"
于 2011-11-07T22:33:55.377 回答
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

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

于 2011-11-07T22:34:07.850 回答
0

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

type Result = Either String [Token] 
于 2011-11-07T22:25:26.357 回答