Haskell中是否有一个函数或函数接受n个参数,并返回一个n元组?例如:
make3tuple:: a -> a -> a -> (a,a,a)
make3tuple a b c = (a,b,c)
ie:喜欢逗号,但是有两个以上的参数。显然make3tuple完成了这项工作,但我觉得必须有一种内置的方法来做到这一点,我没有找到它,或者错过某种方式来使用其他无处不在的功能。
FWIW,使用liftM3(或更高版本)时会出现这种情况。例如:
type RandomState a = State StdGen a
[...]
getTwoRandoms = liftM2 (,) getRandom getRandom
get3Randoms = liftM3 make3tuple getRandom getRandom getRandom
谢谢!
答案 0 :(得分:13)
是。
(,,) :: a -> b -> c -> (a, b, c)
(,,,) :: a -> b -> c -> d -> (a, b, c, d)
等
所以你可以写liftM3 (,,) getRandom getRandom getRandom
Haskell编译器提供这样的函数到一定的大小(我认为保证是15元组)
答案 1 :(得分:1)
不像makeNtuple :: Int -> a -> a -> ... -> (a,a,...)
这样的函数,注意它在类型语言中似乎是不可表达的。如果您对具有同类型的元组没问题,那么您可以使用"dependently-typed" Vector
s
data Nat = Ze | Su Nat
data Vec :: * -> Nat -> * where
Nil :: Vec a Ze
Cons :: a -> Vec a n -> Vec a (Su n)