将相同的参数传递给函数两次

时间:2016-05-20 20:25:29

标签: elm

在Elm中,是否有一个高阶函数来转换一个函数,该函数将两个相同类型的参数转换为一个函数,该函数接受一个参数并将其作为两个参数传递给原始函数?

这样的功能会有以下签名:

twiceTo: (a -> a -> b) -> (a -> b)

它可以用来定义,例如,这些函数。

square = twiceTo (*)
tuplize = twiceTo (,)

square 4 -- returns 16
tuplize 1 -- returns (1, 1)

将函数定义为twiceTo func a = func a a会很容易,但是这个函数是否存在于核心库或任何其他库中?更重要的是,有没有办法从核心库中的高阶帮助程序中编写此函数,如alwaysidentity>>|>和朋友?在不必声明额外函数或使用匿名函数的情况下使用它是很好的。

1 个答案:

答案 0 :(得分:3)

这样的功能不在Basics中。

您可以使用lambda(\x -> ...)内联表达它:

square = (\f x -> f x x) (*)

...但是更清楚的是内联第一个操作数:

square x = x * x

我认为只有使用Basics的组合符来表达twice而没有lambda的方式。