【发布时间】:2018-02-20 21:47:22
【问题描述】:
我正在映射一个元组并设法使其适用于单个元组 (a, a)。但是当我将元组更改为[[(a, a)]] 时,它会说“无法将[(a, a)] 的预期类型与(a, a) 匹配。
mapTuple :: (a -> b) -> [[(a, a)]] -> [(b, b)]
mapTuple f [] = []
mapTuple f ((a1, a2) : xs) = (f a1, f a2) : mapTuple f xs
myfunc :: Int -> Int
myfunc xk = xk + 1
myTup = [[(1,2),(5,6),(9,10)]] :: [[(Int, Int)]]
test = mapTuple myfunc myTup
还不能解决这个错误。我在这里遗漏了一些东西。提前感谢您的帮助。
【问题讨论】:
-
这很合逻辑不是吗?
-
如果输入为
[[(1,1),(2,2)],[(3,3)]],你想得到什么结果? -
要不要展平输入列表?您刚刚描述的函数的类型为
(a -> b) -> [[(a, a)]] -> [[(b, b)]]。 -
[[(2,2),(3,3)],[(4,4)]]的类型错误。你想要[(b, b)],但它的类型是[[(b, b)]]。 -
“应该是
[[(2,2),(3,3)],[(4,4)]]”。 “当我展平列表时它会起作用”。选择一个。