Haskell: 述語の連結

2つの述語p, qに対して「p(x)またはq(x)である」という述語を作る方法で、モノイドを使う方法。

predOr p q = getAny . (Any . p <> Any . q)

「p(x)かつq(x)である」ならこう、

predAnd p q = getAny . (All . p <> All . q)

ここでは (a -> Any) とか (a -> All) をモノイドと見て連結 (<>) を使っている。