diff --git a/fn/predicate.go b/fn/predicate.go new file mode 100644 index 000000000..0931bdc96 --- /dev/null +++ b/fn/predicate.go @@ -0,0 +1,20 @@ +package fn + +// Pred[A] is a type alias for a predicate operating over type A. +type Pred[A any] func(A) bool + +// PredAnd is a lifted version of the && operation that operates over functions +// producing a boolean value from some type A. +func PredAnd[A any](p0 Pred[A], p1 Pred[A]) Pred[A] { + return func(a A) bool { + return p0(a) && p1(a) + } +} + +// PredOr is a lifted version of the || operation that operates over functions +// producing a boolean value from some type A. +func PredOr[A any](p0 Pred[A], p1 Pred[A]) Pred[A] { + return func(a A) bool { + return p0(a) || p1(a) + } +}