Haskell:'makeNtuple'功能?

gwi*_*man 5 haskell tuples

Haskell中是否有一个函数或函数接受n个参数,并返回一个n元组?例如:

make3tuple:: a -> a -> a -> (a,a,a)
make3tuple a b c = (a,b,c)
Run Code Online (Sandbox Code Playgroud)

即:像逗号,但两个以上的参数.显然make3tuple完成了这项工作,但我觉得必须有一个内置的方法来做到这一点,我没有找到它,或者错过某种方式来使用其他无处不在的功能.

FWIW,这在使用liftM3(或更高)时出现.例如:

type RandomState a = State StdGen a
[...]
getTwoRandoms = liftM2 (,) getRandom getRandom
get3Randoms = liftM3 make3tuple getRandom getRandom getRandom
Run Code Online (Sandbox Code Playgroud)

谢谢!

ami*_*dfv 13

是.

(,,) :: a -> b -> c -> (a, b, c)
(,,,) :: a -> b -> c -> d -> (a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

等等

所以你可以写 liftM3 (,,) getRandom getRandom getRandom

Haskell编译器提供这样的函数到一定的大小(我认为保证是15元组)

  • 使用名为`TupleSections`的扩展,您甚至可以部分应用它.所以`(,1,,2)`等于`\ xy - >(x,1,y,2)`. (5认同)