Remove the type-checking knot.
[ghc.git] / testsuite / tests / polykinds / MonoidsFD.hs
index 7cf9a59..67be60d 100644 (file)
@@ -13,8 +13,9 @@
 {-# LANGUAGE UnicodeSyntax #-}
 
 module Main where
-import Control.Monad (Monad(..), join)
+import Control.Monad (Monad(..), join, ap)
 import Data.Monoid (Monoid(..))
+import Data.Semigroup (Semigroup(..))
 
 -- First we define the type class Monoidy:
 
@@ -81,9 +82,15 @@ 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 Monoidy (→) (,) () m ⇒ Semigroup m where
+  (<>) = curry mjoin
+
 instance Monoidy (→) (,) () m ⇒ Monoid m where
   mempty = munit ()
-  mappend = curry mjoin
+
+instance Applicative Wrapper where
+  pure  = return
+  (<*>) = ap
 
 -- instance (Functor m, Monoidy NT FC Id m) ⇒ Monad m where
 instance Monad Wrapper where