shithub: MicroHs

Download patch

ref: 6227f227f0d19b5e1fa75d51df18ea26211f14ed
parent: e824ee9e242736850b20320506544839126f1487
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Mon Dec 18 09:46:56 EST 2023

Add Sum&Product

--- a/lib/Data/Monoid.hs
+++ b/lib/Data/Monoid.hs
@@ -7,6 +7,7 @@
 import Data.Functor
 import Data.List_Type
 import Data.Ord
+import Data.Num
 import Data.Semigroup
 
 class Semigroup a => Monoid a where
@@ -74,3 +75,27 @@
 
 instance forall a . (Ord a, Bounded a) => Monoid (Min a) where
   mempty = Min maxBound
+
+---------------------
+
+newtype Sum a = Sum a
+getSum :: forall a . Sum a -> a
+getSum (Sum a) = a
+
+instance forall a . Num a => Semigroup (Sum a) where
+  Sum a <> Sum b = Sum (a + b)
+
+instance forall a . (Num a) => Monoid (Sum a) where
+  mempty = Sum 0
+
+---------------------
+
+newtype Product a = Product a
+getProduct :: forall a . Product a -> a
+getProduct (Product a) = a
+
+instance forall a . Num a => Semigroup (Product a) where
+  Product a <> Product b = Product (a * b)
+
+instance forall a . (Num a) => Monoid (Product a) where
+  mempty = Product 1
--