From 4c0f972c4616eb549a098c3ef40d527eb542d7a6 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sat, 21 Nov 2020 16:51:04 -0500 Subject: Add basic pattern matching Adds a basic pattern matching implementation. Not perfect, but pretty good, considering what we have to work with --- .../utils/patterns/FunctionalPatternMatcher.java | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java (limited to 'base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java') diff --git a/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java b/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java new file mode 100644 index 0000000..5a214d3 --- /dev/null +++ b/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java @@ -0,0 +1,31 @@ +package bjc.utils.patterns; + +import bjc.functypes.*; + +/** + * A simple pattern matcher backed by a function. + * + * @author Ben Culkin + * + * @param The type returned by the matcher. + * @param The type to match against. + */ +public class FunctionalPatternMatcher + implements IPatternMatcher { + + private final ThrowFunction matcher; + + /** + * Create a new function-backed pattern matcher. + * + * @param matcher The function backing this matcher. + */ + public FunctionalPatternMatcher(ThrowFunction matcher) { + this.matcher = matcher; + } + + @Override + public ReturnType matchFor(InputType input) throws NonExhaustiveMatch { + return matcher.apply(input); + } +} -- cgit v1.2.3