Elm

时间:2016-06-29 11:01:00

标签: types elm

鉴于代码如(为了简洁而剥离了导入):

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

没有类型注释或类型注释,但使用==代替<一切正常。这是榆树编译器中的错误还是我做错了什么?

我在http://elm-lang.org/try

使用了在线编辑器

1 个答案:

答案 0 :(得分:1)

这是编译器的一个问题,据报道here。看起来你们已经根据评论找出comparable做了什么,但对于那些喜欢跳过答案的人来说:

可以在类型注释中使用一些“魔术”类型变量来约束可以传入的事物的类型。它们是:

  • comparableIntFloatCharStringList以及其中任何一个的n元组:正如您发现的那样,(<)等运营商会接受的任何内容
  • appendableStringListText):(++)运营商将接受的任何内容
  • numberFloatInt):(+)(-)等运营商接受的任何内容