我有这个简单的功能:
bombplaces::Int->[(Int,Int)]->[(Int,Int)]
bombplaces bombCount listOfPossiblePoints = nub (map (take bombCount) (perms listOfPossiblePoints))
炸弹是(x,y)(基础点)
我需要获得所有排列并仅获取前几个(bombCount)点。
我收到了以下错误:
Couldn't match expected type `(Int,Int)' with actual type `[a0]'
Expected type: [a0] -> (Int,Int)
Actual type: [a0] -> [a0]
In the return type of a call of `take'
In the first argument of `map', namely `(take liczbaBomb)'
答案 0 :(得分:6)
如果您删除类型签名并询问GHCi的类型,您的问题将是显而易见的:
> :t bombplaces
bombplaces :: Eq a => Int -> [a] -> [[a]]
也就是说,bombplaces
想要返回列表列表,而您希望它返回一个普通列表。您需要更改类型签名,或更改函数的定义,具体取决于您希望行为的内容。
N.B。您没有告诉我们您使用的perms
的定义是什么,所以我假设了一个明显的定义。