Elm中的无穷符号

Elm中的无穷符号,elm,Elm,在我与同事合作的一个项目中,我们使用了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

在我与同事合作的一个项目中,我们使用了
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
        ]
ourParser:UrlParser.Parser a
我们的解析器=
UrlParser.oneOf
[UrlParser.s“主页”
,UrlParser.s“detail”UrlParser.string
]
主要问题是:这是什么
符号?它的定义是什么?如果我试图在我的函数定义中复制/粘贴它,我会得到一个语法错误,好像Elm实际上不知道那个字符是什么


下面的问题是:我的代码怎么会出现这样的错误?

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

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

结果类型为

UrlParser.s "detail" </> UrlParser.string  :  Parser (String -> b) b
因为您正在构建这些的列表,所以它们必须具有相同的常规类型。同样地,
c~(String->b)
,但也
c~b
。这里有一个循环,产生一个无限类型。这就是无限符号的意思

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


显示了如何通过使用
格式
组合不同类型的解析器

在任何情况下,都需要将第一个解析器转换为
解析器(String->c)c
类型。从类型来看,似乎将
格式“some string”
应用到第一个解析器已经足够了,但我对Elm或UrlParser了解不够,无法对此做出任何保证

u ~ a
v ~ a
v ~ (String -> b)
w ~ b
UrlParser.s "detail" </> UrlParser.string  :  Parser (String -> b) b
UrlParser.s "home"  :  Parser c c