输入Haskell的同义词,给出类型错误

时间:2011-11-07 22:22:31

标签: haskell types ghci

我正在尝试创建一个类似于此的类型同义词:

data Result = Either String [Token]

我遇到了困难,因为当这段代码编译时,当我尝试用[Token]创建一个Result时,haskell会抱怨

    Not in scope: data constructor `Result'

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

3 个答案:

答案 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]