En Haskell performance `et` et `ou` pour les fonctions booléennes

J'ai juste écrit les deux fonctions suivantes:

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)

Ils pourraient être utilisés pour combiné les valeurs de deux booléens fonctions telles que:

import Text.ParserCombinators.Parsec
import Data.Char

nameChar = satisfy (isLetter `f_or` isDigit)

D'après ces deux fonctions, je suis venu à réaliser qu'elles sont très utiles. tant et si bien que maintenant, je soupçonne qu'ils sont soit inclus dans la bibliothèque standard, ou, plus probablement, qu'il y a un moyen propre de faire cela à l'aide de fonctions existantes.

Ce qu'était la "bonne" façon de le faire?

  • Haskell, la langue où tout est déjà dans un typeclass de la bibliothèque standard, quelque part. Typeclassopedia peut aider à remédier à cela.