Elm 给我指定号码 Int

Elm specify number to me Int

我正在尝试查看给定列表的长度是否等于某个数字。但是 == 期望两个数字不是 Int,所以即使我键入 (==) 1 类型仍然是 number -> Bool 所以最后当我输入 lenght 的结果时我得到编译错误:

-- TYPE MISMATCH ---------------------------------------------------------- REPL

This function cannot handle the argument sent through the (|>) pipe:

4|   List.length |> ((==) 1)
                     ^^^^^^

The argument is:

List a -> Int

But (|>) is piping it to a function that expects:

number

Hint: Only Int and Float values work as numbers.

那么如何指定我的常量是 Int 而不是数字变量呢?

我认为您可能想多了,在 Elm 中检查相等性与在其他语言中一样简单。

myList = [1, 2, 3]
List.length myList == 3 // True

如果你确实想使用 (==) 函数,以防你正在使用柯里化或其他原因

List.length myList |> (==)

然后您可以将其存储为变量或立即调用它

List.length myList |> (==) 3 // True

lengthChecker = List.length myList |> (==)
lengthChecker 3 // True

但我会说,最好坚持使用 == 进行检查的简单版本。

为了进一步说明您的尝试未通过编译的原因,(==) 的签名是 (==) : a -> a -> Bool,这意味着它是一个接受一个参数的函数,a 和 returns 一个接受一个参数的函数,a 和 returns 一个 Bool。所以在你的例子中 ((==) 1) 是一个需要 number 的函数。当您执行 List.length |> ((==) 1) 时,您正在尝试调用该函数,该函数需要一个带有 List.length 函数本身的数字。

使用>>组合函数。

isLengthOne = List.length >> ((==) 1) 是一个检查列表长度是否为 1 的函数。

|> 将一个语句的输出通过管道传输到下一个语句的输入。

所以 aList |> List.length |> ((==) 1) 会检查 aList