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)
如果我把 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]
编译此代码。
我收到这个错误:
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)
如果我把 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]
编译此代码。