学习Haskell,我正在尝试编写一个takeIf
给定条件的函数,并且列表返回满足条件的所有列表元素。
所需输出的示例:
takeIf (>0) [] --> []
takeIf (>0) [-1, 0, 1, 2] --> [1,2]
我试过这个定义:
takeIf cond [] = []
takeIf cond (x:xs) = if (cond x)
then x:(takeIf cond xs)
else []:(takeIf cond xs)
但它不起作用。
我的第一个问题是:我有
:t takeIf --> ([a] -> Bool) -> [[a]] -> [[a]]
为什么?为什么不:
:t takeIf --> (a -> Bool) -> [a] -> [a]
我怎样才能让这个代码工作?
这是我得到的错误:
如果有帮助,我正在使用ghci