diff --git a/src/main/java/com/ceticamarco/lambdatonic/Either.java b/src/main/java/com/ceticamarco/lambdatonic/Either.java index b56a4d4..8fc8d52 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Either.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Either.java @@ -70,7 +70,7 @@ public sealed interface Either permits Left, Right { * Applies onLeft function to the Left subtype or the * onRight function to the Right subtype. *

- * @param onLeft The function to apply to the Left subtyp + * @param onLeft The function to apply to the Left subtype * @param onRight The function to apply to the Right subtype * @return An Either functor * @param The return type of the onLeft function @@ -109,4 +109,12 @@ public sealed interface Either permits Left, Right { * @return An Optional data type */ Optional toOptional(); + + /** + *

+ * Flips the Left and the Right data types. + *

+ * @return An Either monad with Left and Right flipped + */ + Either swap(); } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Left.java b/src/main/java/com/ceticamarco/lambdatonic/Left.java index 5a57fe9..e9f89ac 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Left.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Left.java @@ -52,4 +52,9 @@ public record Left(L value) implements Either { public Optional toOptional() { return Optional.empty(); } + + @Override + public Either swap() { + return new Right<>(this.value); + } } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Right.java b/src/main/java/com/ceticamarco/lambdatonic/Right.java index 828969b..d4b8cdd 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Right.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Right.java @@ -52,4 +52,9 @@ public record Right(R value) implements Either { public Optional toOptional() { return Optional.of(this.value); } + + @Override + public Either swap() { + return new Left<>(this.value); + } } \ No newline at end of file diff --git a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java index 95994c8..cb10c01 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java @@ -103,4 +103,12 @@ public class LeftTests { Optional.empty() ); } + + @Test + public void testSwapFromLeft() { + assertEquals( + this.resEither.swap(), + new Right<>(19) + ); + } } diff --git a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java index daebfca..0076f80 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java @@ -103,4 +103,12 @@ public class RightTests { Optional.of(4) ); } + + @Test + public void testSwapFromRight() { + assertEquals( + this.numEither.swap(), + new Left<>(4) + ); + } }