<NME> monoid.py"
<BEF> ADDFILE
<MSG> Added monoid

<DFF> @@ -0,0 +1,21 @@
+from abc import ABCMeta, abstractmethod
+from functools import reduce
+
+class Monoid(metaclass=ABCMeta):
+    @staticmethod
+    @abstractmethod
+    def mempty() -> "IMonoid":
+        """mempty :: m"""
+        return NotImplemented
+
+    @abstractmethod
+    def mappend(self, other) -> "IMonoid":
+        """mappend :: m -> m -> m"""
+        return NotImplemented
+
+    @classmethod
+    def mconcat(cls, xs) -> "IMonoid":
+        """mconcat :: [m] -> m"""
+
+        reducer = lambda a, b: a.mappend(b)
+        return reduce(reducer, xs, cls.mempty())

Added monoid