В 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