Haskell 中的元组函数

Tuple function in Haskell

我有这个功能

getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate)`

我预计

getCode [(‘a’,4),(‘b’,1),(‘a’,3),(‘b’,1)]

输出

“aaaabaaab” 

相反,我得到一个错误,它与预期的数据类型 [(a,Int)] 不匹配,而实际数据类型是 [(Int,a)]。我如何更改它以使其工作?或者其他方式?

您可以将 replicate 的参数与 flip 函数交换:

flip :: (a -> b -> c) -> b -> a -> c

flip f takes its (first) two arguments in the reverse order of f.

getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry (flip replicate))

或者使用 Data.Tuple 中的 swap 用元组而不是函数参数做同样的事情:

getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate . swap)