haskell 中的类型错误

Error in types in haskell

我收到这个错误:

Type error in application
*** Expression     : length (filter (flip (==) x))
*** Term           : filter (flip (==) x)
*** Type           : [b] -> [b]
*** Does not match : [a]

这是我的代码:

numocc::(Eq a) => a -> [[a]] -> [Int]
numocc = map.((length.).(f))

f:: (Eq a) => a -> [a] -> a
f = filter.(flip (==))

我看不懂类型。有人可以帮助我吗?

您太努力了,无法获得积分,只需使用:

f :: (Eq a) => a -> [a] -> [a]
f x = filter (== x)

然后:

numocc :: (Eq a) => a -> [[a]] -> [Int]
numocc x = map (length . f x)

Live demo

如果我把 f 的定义放在 ghci 中,我得到:

Expected type: (a -> Bool) -> [a] -> a
  Actual type: (a -> Bool) -> [a] -> [a]
In the first argument of `(.)', namely `filter'
In the expression: filter . (flip (==))

换句话说,这里的结果是一个类型a的列表,而预期的是类型a的单个实例。 如果您将谓词应用于列表,并且结果应该是单个实例,那么您可能想要进行某种折叠。

正在将 f 的类型更改为

f:: (Eq a) => a -> [a] -> [a]

编译此代码。