Haskell 给出类型错误的类型同义词

发布于 2024-12-14 10:22:30 字数 249 浏览 2 评论 0原文

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

data Result = Either String [Token]

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

    Not in scope: data constructor `Result'

如何使用构造函数定义类型同义词那行得通吗?!

I am attempting to create a type synonym that looks something like this:

data Result = Either String [Token]

I'm having difficulty because while this code compiles, when I attempt to create a Result with a [Token], haskell complains

    Not in scope: data constructor `Result'

How can I define a type synonym with a constructor that works?!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

快乐很简单 2024-12-21 10:22:30

您如何尝试创建结果
正确的方法是:

如果您将其声明为 data

data Result = Result (Either String [Token])

f :: Result
f = (Result (Left "test"))

或者,如果您将其声明为 type

type Result = Either String [Token]

f :: Result
f = Left "test"

How are you trying to create a Result??
The correct way is:

If you declare it as a data:

data Result = Result (Either String [Token])

f :: Result
f = (Result (Left "test"))

Or, if you declare as a type:

type Result = Either String [Token]

f :: Result
f = Left "test"
此岸叶落 2024-12-21 10:22:30

使用

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 是众所周知的类型构造函数。

With

type Result = Either String Token

the data constructors are

Left :: String -> Result
Right :: [Token] -> Result

because

data Either a b = Left a | Right b

With

data Result = Either String [Token]

you declare Result to have one two-argument constructor, Either with type

Either :: String -> [Token] -> Result

which is a) probably not what you want and b) confusing, because Either is a well-known type constructor.

七月上 2024-12-21 10:22:30

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

type Result = Either String [Token] 

I think you need to use type and not data

type Result = Either String [Token] 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文