我有这个功能
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 off
.
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry (flip replicate))
或者使用swap
来自 Data.Tuple
使用元组而不是函数参数执行相同的操作:
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate . swap)
关于list - Haskell 中的元组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772440/