我写了一个过滤功能:
f :: (a -> Bool) -> [a] -> [a]
f p xs = case xs of
[] -> []
x : xs' -> if p x
then x : f p xs'
else f p xs'
Run Code Online (Sandbox Code Playgroud)
要了解绑定,我想使用绑定实现此功能。我在想什么:
f p xs = xs >>= (\x xs -> if p x then x : f p xs else f p xs)
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误:
* Couldn't match expected type `[a]' with actual type `[a] -> [a]'
* The lambda expression `\ x xs …Run Code Online (Sandbox Code Playgroud)