鉴于代码如(为了简洁而剥离了导入):
fn: List a -> List a -> Bool
fn x y =
x < y
main =
text (toString(fn [1,1] [1,2]))
我犯了一个很奇怪的错误:
The type annotation for `fn` does not match its definition.
15| fn: List a -> List a -> Bool
^^^^^^^^^^^^^^^^^^^^^^^^
The type annotation is saying:
List a -> List a -> Bool
But I am inferring that the definition has this type:
List a -> List a -> Bool
没有类型注释或类型注释,但使用==
代替<
一切正常。这是榆树编译器中的错误还是我做错了什么?
答案 0 :(得分:1)
这是编译器的一个问题,据报道here。看起来你们已经根据评论找出comparable
做了什么,但对于那些喜欢跳过答案的人来说:
可以在类型注释中使用一些“魔术”类型变量来约束可以传入的事物的类型。它们是:
comparable
(Int
,Float
,Char
,String
和List
以及其中任何一个的n元组:正如您发现的那样,(<)
等运营商会接受的任何内容appendable
(String
,List
,Text
):(++)
运营商将接受的任何内容number
(Float
,Int
):(+)
和(-)
等运营商接受的任何内容