From 44be6e6cd7671dd243056107ffa6201504f7fbce Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sun, 25 Jun 2023 15:50:38 -0400 Subject: Update a number of things --- src/main/java/bjc/data/BooleanToggle.java | 2 +- src/main/java/bjc/data/Either.java | 24 ++++++ src/main/java/bjc/data/Lazy.java | 17 ++--- src/main/java/bjc/data/OneWayToggle.java | 3 +- src/main/java/bjc/data/Pair.java | 9 +++ src/main/java/bjc/data/PetriNet.java | 17 +++++ src/main/java/bjc/data/PetriTransition.java | 59 +++++++++++++- src/main/java/bjc/data/Triple.java | 78 +++++++++++++++++++ src/main/java/bjc/data/ValueToggle.java | 6 +- src/main/java/bjc/esodata/AbbrevMap2.java | 71 +++++++++++++---- .../java/bjc/esodata/ClosedSpoolException.java | 48 ++++++++++++ src/main/java/bjc/esodata/ComplexSpooler.java | 43 +++++++++++ src/main/java/bjc/esodata/DefaultList.java | 3 +- src/main/java/bjc/esodata/DefaultSpool.java | 80 +++++++++++++++++++ src/main/java/bjc/esodata/DefaultSpooler.java | 43 +++++++++++ src/main/java/bjc/esodata/KeyedList.java | 11 +++ src/main/java/bjc/esodata/Multimap.java | 5 ++ src/main/java/bjc/esodata/NestList.java | 6 +- src/main/java/bjc/esodata/PushdownMap.java | 4 +- src/main/java/bjc/esodata/Spool.java | 48 ++++++++++++ src/main/java/bjc/esodata/Spooler.java | 42 ++++++++++ src/main/java/bjc/esodata/TSetMultimap.java | 3 +- src/main/java/bjc/esodata/TapeLibrary.java | 4 +- src/main/java/bjc/esodata/spool/Spool.java | 22 ------ src/main/java/bjc/esodata/spool/Spooler.java | 22 ------ src/main/java/bjc/funcdata/ExtendedMap.java | 13 ++-- src/main/java/bjc/funcdata/Freezable.java | 1 + src/main/java/bjc/funcdata/FunctionalMap.java | 8 +- src/main/java/bjc/funcdata/MapEx.java | 2 +- .../java/bjc/funcdata/TransformedValueMap.java | 4 +- src/main/java/bjc/functypes/Combinators.java | 17 +++++ src/main/java/bjc/functypes/Const.java | 18 +++++ src/main/java/bjc/functypes/Predicates.java | 3 - src/main/java/bjc/functypes/ThrowFunction.java | 24 +++--- src/main/java/bjc/functypes/TriFunction.java | 14 ++++ src/main/java/bjc/functypes/VarArgFunction.java | 22 ++++++ src/main/java/bjc/optics/Adapter.java | 15 ++++ src/main/java/bjc/optics/AdapterX.java | 89 ++++++++++++++++++++++ src/main/java/bjc/optics/Adapters.java | 47 ++++++++++++ src/main/java/bjc/optics/Lens.java | 38 +++++++-- src/main/java/bjc/optics/LensX.java | 1 - src/main/java/bjc/optics/Lenses.java | 23 +++++- src/main/java/bjc/optics/Prism.java | 70 +++++++++++++++++ src/main/java/bjc/optics/PrismX.java | 67 ++++++++++++++++ src/main/java/bjc/optics/Prisms.java | 56 ++++++++++++++ src/main/java/bjc/optics/Traversal.java | 14 ++++ src/main/java/bjc/optics/TraversalX.java | 54 +++++++++++++ src/main/java/bjc/typeclasses/Applicative.java | 39 ++++++++++ src/main/java/bjc/typeclasses/BiContainer.java | 8 ++ src/main/java/bjc/typeclasses/Container.java | 7 ++ src/main/java/bjc/typeclasses/FunList.java | 47 ++++++++++++ src/main/java/bjc/typeclasses/FunctorX.java | 10 +++ src/main/java/bjc/typeclasses/ListC.java | 16 ++++ src/main/java/bjc/typeclasses/PFLens.java | 21 +++-- src/main/java/module-info.java | 2 + 55 files changed, 1292 insertions(+), 128 deletions(-) create mode 100644 src/main/java/bjc/data/Triple.java create mode 100644 src/main/java/bjc/esodata/ClosedSpoolException.java create mode 100644 src/main/java/bjc/esodata/ComplexSpooler.java create mode 100644 src/main/java/bjc/esodata/DefaultSpool.java create mode 100644 src/main/java/bjc/esodata/DefaultSpooler.java create mode 100644 src/main/java/bjc/esodata/Spool.java create mode 100644 src/main/java/bjc/esodata/Spooler.java delete mode 100644 src/main/java/bjc/esodata/spool/Spool.java delete mode 100644 src/main/java/bjc/esodata/spool/Spooler.java create mode 100644 src/main/java/bjc/functypes/VarArgFunction.java create mode 100644 src/main/java/bjc/optics/Adapter.java create mode 100644 src/main/java/bjc/optics/AdapterX.java create mode 100644 src/main/java/bjc/optics/Adapters.java create mode 100644 src/main/java/bjc/optics/Prism.java create mode 100644 src/main/java/bjc/optics/Prisms.java create mode 100644 src/main/java/bjc/optics/Traversal.java create mode 100644 src/main/java/bjc/optics/TraversalX.java create mode 100644 src/main/java/bjc/typeclasses/Applicative.java create mode 100644 src/main/java/bjc/typeclasses/FunctorX.java diff --git a/src/main/java/bjc/data/BooleanToggle.java b/src/main/java/bjc/data/BooleanToggle.java index 56cbdf0..41f2564 100644 --- a/src/main/java/bjc/data/BooleanToggle.java +++ b/src/main/java/bjc/data/BooleanToggle.java @@ -83,7 +83,7 @@ public class BooleanToggle implements Toggle { final BooleanToggle other = (BooleanToggle) obj; if (val != other.val) return false; - else return true; + return true; } @Override diff --git a/src/main/java/bjc/data/Either.java b/src/main/java/bjc/data/Either.java index 42d2e99..07845f6 100644 --- a/src/main/java/bjc/data/Either.java +++ b/src/main/java/bjc/data/Either.java @@ -185,6 +185,14 @@ public class Either { return rightVal; } + /** + * Change the type of the right-side of this either. + * + * Works only for left Eithers. + * + * @param The new type for the right side + * @return The either with the new type. + */ @SuppressWarnings("unchecked") public Either newRight() { if (isLeft) return (Either) this; @@ -192,6 +200,14 @@ public class Either { throw new NoSuchElementException("Can't replace right type on right Either"); } + /** + * Change the type of the left-side of this either. + * + * Works only for right Eithers. + * + * @param The new type for the left side + * @return The either with the new type. + */ @SuppressWarnings("unchecked") public Either newLeft() { if (isLeft) @@ -199,6 +215,14 @@ public class Either { return (Either) this; } + /** + * Collapse an Either with the same type on both sides. + * + * @param The type of the either + * @param eth The either to collapse + * + * @return The collapsed either + */ public static T collapse(Either eth) { return eth.extract(ID.id(), ID.id()); } diff --git a/src/main/java/bjc/data/Lazy.java b/src/main/java/bjc/data/Lazy.java index 45293e2..436e4c3 100644 --- a/src/main/java/bjc/data/Lazy.java +++ b/src/main/java/bjc/data/Lazy.java @@ -87,10 +87,7 @@ public class Lazy implements Holder { } - final Supplier supplier = () -> { - if (valueMaterialized) return heldValue; - else return valueSupplier.get(); - }; + final Supplier supplier = () -> valueMaterialized ? heldValue : valueSupplier.get(); return new BoundLazy<>(() -> new Lazy<>(supplier, pendingActions), binder); } @@ -128,18 +125,18 @@ public class Lazy implements Holder { if (valueMaterialized) { if (actions.isEmpty()) { return String.format("value[v='%s']", heldValue); - } else { - return String.format("value[v='%s'] (has %d pending transforms)", - heldValue, actions.getSize()); } + + return String.format("value[v='%s'] (has %d pending transforms)", + heldValue, actions.getSize()); } if (actions.isEmpty()) { return"(unmaterialized)"; - } else { - return String.format("(unmaterialized; has %d pending transforms", - actions.getSize()); } + + return String.format("(unmaterialized; has %d pending transforms", + actions.getSize()); } @Override diff --git a/src/main/java/bjc/data/OneWayToggle.java b/src/main/java/bjc/data/OneWayToggle.java index 0705344..c427af3 100644 --- a/src/main/java/bjc/data/OneWayToggle.java +++ b/src/main/java/bjc/data/OneWayToggle.java @@ -57,8 +57,7 @@ public class OneWayToggle implements Toggle { @Override public E peek() { - if (gotFirst) return second; - else return first; + return gotFirst ? second : first; } @Override diff --git a/src/main/java/bjc/data/Pair.java b/src/main/java/bjc/data/Pair.java index fe65936..dd6ff7c 100644 --- a/src/main/java/bjc/data/Pair.java +++ b/src/main/java/bjc/data/Pair.java @@ -268,6 +268,15 @@ public interface Pair extends Bifunctor(left, right); } + /** + * Swap the left & right sides of this pair + * + * @return The pair with the left and right types swapped + */ + public default Pair swap() { + return merge((l, r) -> Pair.pair(r, l)); + } + @Override default void formatTo(Formatter formatter, int flags, int width, int precision) { if ((flags & FormattableFlags.ALTERNATE) != 0) { diff --git a/src/main/java/bjc/data/PetriNet.java b/src/main/java/bjc/data/PetriNet.java index b4c08e1..2dea6d6 100644 --- a/src/main/java/bjc/data/PetriNet.java +++ b/src/main/java/bjc/data/PetriNet.java @@ -31,11 +31,19 @@ public class PetriNet