:: (a -> Bool) -> (a -> Bool) -> (a -> Bool) is:exact -package:unipatterns

Lift boolean or over predicates.
And (&&) operator over one-argument properties. Allows building conjuntions between one-argument properties:
> holds 100 $ id === (+0) &&& id === (id . id)
True
Or (||) operator over one-argument properties. Allows building disjunctions between one-argument properties:
> holds 100 $ id === (+0) ||| id === (id . id)
True
Allows building equality properties between functions.
prop_id_idempotent  =  id === id . id
> check $ id === (+0)
+++ OK, passed 200 tests.
> check $ id === id . id
+++ OK, passed 1 tests (exhausted).
> check $ id === (+1)
*** Failed! Falsifiable (after 1 tests):
0
>>> fold (handles (filtered even) sum) [1..10]
30
>>> foldM (handlesM (filtered even) (Foldl.mapM_ print)) [1..10]
2
4
6
8
10
Extend a generic query by a type-specific query. The function created by extQ def ext behaves like the generic query def if its argument cannot be cast to the type b, and like the type-specific query ext otherwise. The name extQ is short for "extend query".

Examples

>>> extQ (const True) not True
False
>>> extQ (const True) not 'a'
True