[project @ 2004-02-26 18:34:14 by ross]
authorross <unknown>
Thu, 26 Feb 2004 18:34:14 +0000 (18:34 +0000)
committerross <unknown>
Thu, 26 Feb 2004 18:34:14 +0000 (18:34 +0000)
instances for Ordering and tuples (up to 5)

Data/Monoid.hs

index a328639..c3e3ff7 100644 (file)
@@ -58,3 +58,33 @@ instance Monoid () where
        mempty        = ()
        _ `mappend` _ = ()
        mconcat _     = ()
+
+instance (Monoid a, Monoid b) => Monoid (a,b) where
+       mempty = (mempty, mempty)
+       (a1,b1) `mappend` (a2,b2) =
+               (a1 `mappend` a2, b1 `mappend` b2)
+
+instance (Monoid a, Monoid b, Monoid c) => Monoid (a,b,c) where
+       mempty = (mempty, mempty, mempty)
+       (a1,b1,c1) `mappend` (a2,b2,c2) =
+               (a1 `mappend` a2, b1 `mappend` b2, c1 `mappend` c2)
+
+instance (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a,b,c,d) where
+       mempty = (mempty, mempty, mempty, mempty)
+       (a1,b1,c1,d1) `mappend` (a2,b2,c2,d2) =
+               (a1 `mappend` a2, b1 `mappend` b2,
+                c1 `mappend` c2, d1 `mappend` d2)
+
+instance (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) =>
+               Monoid (a,b,c,d,e) where
+       mempty = (mempty, mempty, mempty, mempty, mempty)
+       (a1,b1,c1,d1,e1) `mappend` (a2,b2,c2,d2,e2) =
+               (a1 `mappend` a2, b1 `mappend` b2, c1 `mappend` c2,
+                d1 `mappend` d2, e1 `mappend` e2)
+
+-- lexicographical ordering
+instance Monoid Ordering where
+       mempty         = EQ
+       LT `mappend` _ = LT
+       EQ `mappend` y = y
+       GT `mappend` _ = GT