Есть ли в Haskell есть оператор splat, такой как Python и Ruby?

В 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
15
задан duplode 26 March 2018 в 20:32
поделиться