gpt4 book ai didi

elm - 榆树中的无穷大符号

转载 作者:行者123 更新时间:2023-12-05 00:18:22 24 4
gpt4 key购买 nike

在我与同事合作的一个项目中,我们使用 UrlParser模块,我们偶然发现了这个错误:

The type annotation for ourParser does not match its definition.

The type annotation is saying:

UrlParser.Parser a a

But I am inferring that the definition has this type:

UrlParser.Parser (String -> ∞) (String -> ∞)

Hint: A type annotation is too generic. You can probably just switch
to the type I inferred. These issues can be subtle though, so read
more about it.

我们的代码类似于
ourParser : UrlParser.Parser a a
ourParser =
UrlParser.oneOf
[ UrlParser.s "home"
, UrlParser.s "detail" </> UrlParser.string
]

主要问题是:这是什么 象征?它在哪里定义?如果我尝试将其复制/粘贴到我的函数定义中,则会出现语法错误,好像 Elm 实际上不知道该字符是什么......

以下问题是:我的代码如何发生这样的错误?

最佳答案

备选方案列表中的第二个解析器结合

UrlParser.s "detail" : Parser a a
UrlParser.string : Parser (String -> b) b

使用
(</>) : Parser u v -> Parser v w -> Parser u w

如您所见,以下类型必须匹配:
u ~ a
v ~ a
v ~ (String -> b)
w ~ b

结果类型是
UrlParser.s "detail" </> UrlParser.string  :  Parser (String -> b) b

您的替代列表中的第一个解析器具有类型
UrlParser.s "home"  :  Parser c c

因为您正在构建这些列表,所以它们必须具有相同的常规类型。因此, c ~ (String -> b) , 还有 c ~ b .你这里有一个循环,导致 无限类型 .这就是无限符号的含义。

错误文本确实具有误导性,因为 Elm 的类型系统不支持无限类型(因为它们没有意义)。这听起来像是一个错误,因为 Elm 应该解释无限类型总是指向编程错误。

documentation for oneOf 显示如何通过使用 format 组合不同类型的解析器.

在任何情况下,您都需要将您的第一个解析器变成 Parser (String -> c) c 类型的东西。 .从类型来看,好像申请了 format "some string"到第一个解析器就足够了,但是我对 Elm 或 UrlParser 的了解还不够,无法对此提供任何保证。

关于elm - 榆树中的无穷大符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37923473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com