В Haskell, выполняя ʻand` и ʻor` для логических функций

Я только что написал следующие две функции:

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)

Посмотрев на эти две функции, я пришел к выводу, что они очень полезны. настолько, что теперь я подозреваю, что они либо включены в стандартную библиотеку, либо, что более вероятно, существует чистый способ сделать это с использованием существующих функций.

Каков был «правильный» способ сделать это?

42
задан Don Stewart 18 April 2011 в 23:55
поделиться