我刚刚写了以下两个函数:
fand :: (a -> Bool) -> (a -> Bool) -> a -> Bool
fand f1 f2 x = (f1 x) && (f2 x)
f_or :: (a -> Bool) -> (a -> Bool) -> a -> Bool
f_or f1 f2 x = (f1 x) || (f2 x)
它们可以用来组合两个布尔函数的值,例如:
import Text.ParserCombinators.Parsec
import Data.Char
nameChar = satisfy (isLetter `f_or` isDigit)
看完这两个函数后,我意识到它们非常有用。以至于我现在怀疑它们是否已包含在标准库中,或者更可能的是,存在一种使用现有函数实现这一功能的简洁方式。
那么,应该使用什么方法才是“正确”的呢?