{-# LANGUAGE InstanceSigs, KindSignatures #-} class Monoid' a where mempty' :: a mappend' :: a -> a -> a instance Monoid' [a] where mempty' :: [a] mempty' = [] mappend' :: [a] -> [a] -> [a] mappend' x y = x ++ y class Functor (f :: * -> *) where fmap :: (a -> b) -> (f a -> f b)