我无法理解Elm中comparable的确切含义。榆树似乎和我一样困惑。

在REPL上:

> f1 = (<)
<function> : comparable -> comparable -> Bool

因此f1接受可比对象。
> "a"
"a" : String
> f1 "a" "b"
True : Bool

因此,看来String具有可比性。
> f2 = (<) 1
<function> : comparable -> Bool

因此f2接受一个可比的。
> f2 "a"
As I infer the type of values flowing through your program, I see a conflict
between these two types:

    comparable

    String

因此,String ,而不能与相提并论吗?
为什么f2的类型不是number -> Boolf2还可以接受哪些其他类似产品?

最佳答案

通常,当您在Elm中看到类型变量时,该变量不受约束。然后,当您提供某种特定类型的东西时,该变量将被该特定类型替换:

-- says you have a function:
foo : a -> a -> a -> Int
-- then once you give an value with an actual type to foo, all occurences of `a` are replaced by that type:
value : Float
foo value : Float -> Float -> Int
comparable是具有内置特殊含义的类型变量。意思是说,它将仅与“可比较”类型匹配,例如IntString和其他一些类型。但是,否则它的行为应相同。因此,我认为在类型系统中存在一个小错误,因为您得到了:
> f2 "a"
As I infer the type of values flowing through your program, I see a conflict
between these two types:

    comparable

    String

如果错误不存在,您将得到:
> f2 "a"
As I infer the type of values flowing through your program, I see a conflict
between these two types:

    Int

    String

编辑:我为此错误打开了一个issue

关于elm - 可比性在榆树中意味着什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31885622/

10-11 02:56