What about this?
import Control.Applicative (liftA2)
-- given f1, f2, and f3
filtered = filter (f1 <&&> f2 <&&> f3) [1..90]
where
(<&&>) = liftA2 (&&)
Here, lifting &&
to Applicative
gives what you marked as <?>
, i.e. an operator to “and” together the results of two unary predicates.
I initially used the name .&&.
for the lifted operator, but amalloy suggested that <&&>
would be a better name by analogy with the other Functor
/Applicative
lifted operators like <$>
.