summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/funcdata/theory/Functor.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2019-07-02 18:05:22 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2019-07-02 18:05:22 -0400
commit843329de434bb334d90927c4d22345373a388530 (patch)
treeb0ad1f764bd29ff43841e1095a5b58194c20cb37 /src/main/java/bjc/funcdata/theory/Functor.java
parentac36f171a3cebb0993cc28548635e3f654f8e325 (diff)
Rename package root
The package root is now bjc, not io.github.bculkin2442.
Diffstat (limited to 'src/main/java/bjc/funcdata/theory/Functor.java')
-rw-r--r--src/main/java/bjc/funcdata/theory/Functor.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/bjc/funcdata/theory/Functor.java b/src/main/java/bjc/funcdata/theory/Functor.java
new file mode 100644
index 0000000..4192bf4
--- /dev/null
+++ b/src/main/java/bjc/funcdata/theory/Functor.java
@@ -0,0 +1,43 @@
+package bjc.funcdata.theory;
+
+import java.util.function.Function;
+
+/**
+ * Represents a container or context some sort usually, but the precise
+ * definition is that it represents exactly what it is defined as.
+ *
+ * @author ben
+ *
+ * @param <ContainedType>
+ * The value inside the functor.
+ */
+public interface Functor<ContainedType> {
+ /**
+ * Converts a normal function to operate over values in a functor..
+ *
+ * N.B: Even though the type signature implies that you can apply the
+ * resulting function to any type of functor, it is only safe to call it
+ * on instances of the type of functor you called fmap on..
+ *
+ * @param <ArgType>
+ * The argument of the function.
+ *
+ * @param <ReturnType>
+ * The return type of the function.
+ *
+ * @param func
+ * The function to convert.
+ *
+ * @return The passed in function converted to work over a particular
+ * type of functors.
+ */
+ public <ArgType, ReturnType> Function<Functor<ArgType>, Functor<ReturnType>> fmap(
+ Function<ArgType, ReturnType> func);
+
+ /**
+ * Retrieve the thing inside this functor.
+ *
+ * @return The thing inside this functor.
+ */
+ public ContainedType getValue();
+}