Haskell 不能';t将预期类型[a]与实际类型'Integer->;[整数]';

Haskell 不能';t将预期类型[a]与实际类型'Integer->;[整数]';,haskell,Haskell,我有下面的代码,找到一个整数的除数,然后找到除数的所有子集,然后对每个子集中的所有除数求和,然后测试该整数是否在求和列表中表示。在findWeird中,这是在整数列表上执行的 allSubsets :: (Integral a ) => [a] -> [[a]] allSubsets [] = [[]] allSubsets ( n : nr ) = allSubsets nr ++ map (n:) (allSubsets nr) sumAllSubsets :: (Integr

我有下面的代码,找到一个整数的除数,然后找到除数的所有子集,然后对每个子集中的所有除数求和,然后测试该整数是否在求和列表中表示。在findWeird中,这是在整数列表上执行的

allSubsets :: (Integral a ) => [a] -> [[a]]
allSubsets [] = [[]]
allSubsets ( n : nr ) = allSubsets nr ++ map (n:) (allSubsets nr)

sumAllSubsets :: (Integral a ) => [a] -> [a]
sumAllSubsets s = map sum (allSubsets s)

allDivisors :: (Integral a) => a -> [a]
allDivisors 0 = []
allDivisors n   | n > 0 = [d | d <- [1..n], n `mod` d == 0]
                | n < 0 = -1 : allDivisors (-n)

findWeird :: (Integral a) => [a] -> [a]
findWeird [] = []
findWeird (n:nn) = (    if n `elem` (AS.sumAllSubsets (DFL.allDivisors))
                        then []
                        else [n]) ++ findWeird nn

但据我所知,所有除数产生一个[Integral],而sumAllSubsets得到一个[Integral],所以我想知道是否有人能帮忙。谢谢。

我认为问题在于你实际上没有将
所有除数
应用于任何东西:

AS.sumAllSubsets (DFL.allDivisors)
只是将
sumAllSubsets
应用于函数
alldivisiors
,而不是其
[整数]
返回值。也许您的意思是
AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将
alldivisiors
应用于
n


(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成

findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn

在这里,我还冒昧地通过()减少了一些嵌套。

我认为问题在于您实际上没有将
所有除数
应用于任何东西:

AS.sumAllSubsets (DFL.allDivisors)
只是将
sumAllSubsets
应用于函数
alldivisiors
,而不是其
[整数]
返回值。也许您的意思是
AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将
alldivisiors
应用于
n


(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成

findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn

在这里,我还冒昧地通过()减少了一些嵌套。

我认为问题在于您实际上没有将
所有除数
应用于任何东西:

AS.sumAllSubsets (DFL.allDivisors)
只是将
sumAllSubsets
应用于函数
alldivisiors
,而不是其
[整数]
返回值。也许您的意思是
AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将
alldivisiors
应用于
n


(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成

findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn

在这里,我还冒昧地通过()减少了一些嵌套。

我认为问题在于您实际上没有将
所有除数
应用于任何东西:

AS.sumAllSubsets (DFL.allDivisors)
只是将
sumAllSubsets
应用于函数
alldivisiors
,而不是其
[整数]
返回值。也许您的意思是
AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将
alldivisiors
应用于
n


(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成

findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn

我还冒昧地通过减少了一些嵌套。)

@user3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以: