如何正确使用|> 运算符?

y.w*_*est -1 functional-programming elm

当我尝试|>在 elm 中使用运算符时出现错误

kl : List Float
kl =
    List.map toFloat (List.range 1 10)
Run Code Online (Sandbox Code Playgroud)
kll : Float
kll =
    let
        half x =
            x / 2
    in
    List.sum (List.map half (List.map toFloat (List.range 1 10)))
Run Code Online (Sandbox Code Playgroud)

下面的代码我使用|>并得到一个错误:

klpipe : List Float
klpipe =
    1 10 |> List.range |> toFloat |> List.map
Run Code Online (Sandbox Code Playgroud)

gle*_*nsl 5

|>只能用于将左侧的单个参数应用于右侧的函数。以下是一些示例,可让您直观地了解它的工作原理:

x |> f == f x
y |> f x == f x y
f x |> g == g (f x)
Run Code Online (Sandbox Code Playgroud)

可以使用 将多个参数应用于单个函数|>,但您必须以相反的顺序一次执行一个,并使用括号来违背其自然结合性:

10 |> (1 |> List.range) |> (toFloat |> List.map)
Run Code Online (Sandbox Code Playgroud)

这里括号中的表达式都计算为“适合”管道右侧的函数。没有括号,1 |> 10 |> List.range将等价于`List.range (10 1)。

然而,我觉得这不是很可读,而是会更谨慎地使用管道运算符:

List.range 1 10 |> List.map toFloat
Run Code Online (Sandbox Code Playgroud)

仅仅因为你可以让它看起来像钉子并不意味着你应该在它上面使用锤子。