在Python和Ruby中(我敢肯定还有其他)。您可以在可枚举的前缀*(“splat”)之前将其用作参数列表。例如,在Python中:

>>> def foo(a,b): return a + b
>>> foo(1,2)
3
>>> tup = (1,2)
>>> foo(*tup)
3

Haskell有类似的东西吗?由于它们的长度是任意的,我认为它不会在列表上起作用,但是我觉得使用元组应该可以。这是我想要的示例:
ghci> let f a b = a + b
ghci> :t f
f :: Num a => a -> a -> a
ghci> f 1 2
3
ghci> let tuple = (1,2)

我正在寻找可以执行以下操作的运算符(或函数):
ghci> f `op` tuple
3

我已经看到(<*>)被称为“splat”,但是在其他语言中,它似乎并没有与splat指代相同的东西。无论如何我都尝试过:
ghci> import Control.Applicative
ghci> f <*> tuple

<interactive>:1:7:
    Couldn't match expected type `b0 -> b0'
                with actual type `(Integer, Integer)'
    In the second argument of `(<*>)', namely `tuple'
    In the expression: f <*> tuple
    In an equation for `it': it = f <*> tuple

最佳答案

是的,您可以使用tuple包将函数应用于元组。尤其要检查uncurryN函数,该函数最多可处理32个元组:

Prelude Data.Tuple.Curry> (+) `uncurryN` (1, 2)
3

10-08 12:39