From df0e442956864a44b14732a57f1ed712b2850bb4 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Sat, 24 Aug 2024 10:26:01 -0500 Subject: [PATCH] predicate combinators: and_p and or_p --- src/core/CCFun.ml | 4 ++++ src/core/CCFun.mli | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/core/CCFun.ml b/src/core/CCFun.ml index 65c9a5d5..8a3e5375 100644 --- a/src/core/CCFun.ml +++ b/src/core/CCFun.ml @@ -8,6 +8,10 @@ include Sys include Stdlib include Fun + +let[@inline] and_p f g x = (f x) && (g x) +let[@inline] or_p f g x = (f x) || (g x) + let[@inline] compose f g x = g (f x) let[@inline] compose_binop f g x y = g (f x) (f y) let[@inline] curry f x y = f (x, y) diff --git a/src/core/CCFun.mli b/src/core/CCFun.mli index fa69904f..913f28e0 100644 --- a/src/core/CCFun.mli +++ b/src/core/CCFun.mli @@ -5,6 +5,16 @@ include module type of Fun (** @inline *) +val and_p : ('a -> bool) -> ('a -> bool) -> 'a -> bool +(** [and_p f g x] is [(f x) && (g x)]. + Produces a predicate which is a conjunction of the two predicates. +*) + +val or_p : ('a -> bool) -> ('a -> bool) -> 'a -> bool +(** [or_p f g x] is [(f x) || (g x)]. + Produces a predicate which is a disjunction of the two predicates. +*) + val compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c (** [compose f g x] is [g (f x)]. Composition. *)