From 6a4cdfa891e8e6fa7f30f5b1765c8ad6f15c94a7 Mon Sep 17 00:00:00 2001 From: "Dr. Carsten Leue" Date: Thu, 12 Oct 2023 21:38:11 +0200 Subject: [PATCH] fix: add monoid for bool Signed-off-by: Dr. Carsten Leue --- boolean/boolean.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 boolean/boolean.go diff --git a/boolean/boolean.go b/boolean/boolean.go new file mode 100644 index 0000000..2c1b080 --- /dev/null +++ b/boolean/boolean.go @@ -0,0 +1,59 @@ +// Copyright (c) 2023 IBM Corp. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package boolean + +import ( + EQ "github.com/IBM/fp-go/eq" + M "github.com/IBM/fp-go/monoid" + O "github.com/IBM/fp-go/ord" +) + +var ( + // MonoidAny is the boolean [M.Monoid] under disjunction + MonoidAny = M.MakeMonoid( + func(l, r bool) bool { + return l || r + }, + false, + ) + + // MonoidAll is the boolean [M.Monoid] under conjuction + MonoidAll = M.MakeMonoid( + func(l, r bool) bool { + return l && r + }, + true, + ) + + // Eq is the equals predicate for boolean + Eq = EQ.FromStrictEquals[bool]() + + // Ord is the strict ordering for boolean + Ord = O.MakeOrd(func(l, r bool) int { + if l { + if r { + return 0 + } + return +1 + } + if r { + return -1 + } + return 0 + }, func(l, r bool) bool { + return l == r + }) +)