Я только что написал следующие две функции:
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)
Посмотрев на эти две функции, я пришел к осознанию того, что они очень полезны. настолько, что теперь я подозреваю, что они либо включены в стандартную библиотеку, либо, скорее всего, есть чистый способ сделать это с помощью существующих функций.
Каков был "правильный" способ сделать это?