我无法理解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 -> Bool
? f2
还可以接受哪些其他类似产品? 最佳答案
通常,当您在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
是具有内置特殊含义的类型变量。意思是说,它将仅与“可比较”类型匹配,例如Int
,String
和其他一些类型。但是,否则它的行为应相同。因此,我认为在类型系统中存在一个小错误,因为您得到了:> 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/