我正在制作项目Euler#41,这是我解决问题的一部分,我无法弄清楚如何绕过Haskell期待[Int]
而不是{{1} }。 Diglist工作正常但我把它包括在内以防错误以某种方式涉及它。
[Integer]
错误是:
digList :: Integer -> [Integer]
digList n = digList' [] n where
digList' xs n
| n < 10 = n : xs
| otherwise = digList' (lsd : xs) nxt
where
lsd = n `mod` 10
nxt = n `div` 10
isNPandigital :: Integer -> Bool
isNPandigital n = isnp 1 (digList n) where --error on this line
isnp i xs
| i `elem` xs = isnp i $ delete i xs
| i == length (digList n) = null xs
| otherwise = False
答案 0 :(得分:2)
i
到isnp
的参数被推断为Int
,因为您使用i `elem` xs
,因为您使用i == length (digList n)
。编译器认为i
应该是Int
,因为您要将其与length (digList n)
进行比较,Int
始终返回i `elem` xs
,并且您正在使用xs
,因此[Int]
必须包含(digList n)
类型,但您为xs
传入digList n
,[Integer]
类型为{{1}},因此错误