diff options
Diffstat (limited to 'testsuite/tests/polykinds/MonoidsTF.hs')
-rw-r--r-- | testsuite/tests/polykinds/MonoidsTF.hs | 12 |
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 |