summaryrefslogtreecommitdiff
path: root/testsuite/tests/polykinds/MonoidsTF.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/polykinds/MonoidsTF.hs')
-rw-r--r--testsuite/tests/polykinds/MonoidsTF.hs12
1 files changed, 9 insertions, 3 deletions
diff --git a/testsuite/tests/polykinds/MonoidsTF.hs b/testsuite/tests/polykinds/MonoidsTF.hs
index 9097e53af2..8e3b378046 100644
--- a/testsuite/tests/polykinds/MonoidsTF.hs
+++ b/testsuite/tests/polykinds/MonoidsTF.hs
@@ -12,12 +12,15 @@
{-# LANGUAGE TypeFamilies #-}
module Main where
+
+import Data.Kind
import Control.Monad (Monad(..), join, ap, liftM)
import Data.Monoid (Monoid(..))
+import Data.Semigroup (Semigroup(..))
-- First we define the type class Monoidy:
-class Monoidy (to :: k0 -> k1 -> *) (m :: k1) where
+class Monoidy (to :: k0 -> k1 -> Type) (m :: k1) where
type MComp to m :: k1 -> k1 -> k0
type MId to m :: k0
munit :: MId to m `to` m
@@ -91,10 +94,13 @@ test2 = print (Sum 1 <+> Sum 2 <+> Sum 4) -- Sum 7
-- rather cumbersome in actual use. So, we can give traditional Monad and
-- Monoid instances for instances of Monoidy:
-instance (MId (→) m ~ (), MComp (→) m ~ (,), Monoidy (→) m)
+instance (MId (→) m ~ (), MComp (→) m ~ (,), Monoidy (→) m)
+ ⇒ Semigroup m where
+ (<>) = curry mjoin
+
+instance (MId (→) m ~ (), MComp (→) m ~ (,), Monoidy (→) m)
⇒ Monoid m where
mempty = munit ()
- mappend = curry mjoin
instance Applicative Wrapper where
pure = return