Endofunção como Monóide

Estou tentando isso (para fins de aprendizado):

{-# LANGUAGE FlexibleInstances #-}

instance Monoid (a -> a) where
  mempty = id
  mappend f g = f . g

esperandoid <> id ser igual aid . id

No entanto, com(id <> id) 1 Eu recebo este erro:

Non type-variable argument in the constraint: Monoid (a -> a)

O que devo mudar para executá-lo?

É apenas para entender melhor as monoides e as classes de letras Haskell, não para qualquer uso prático.

questionAnswers(2)

yourAnswerToTheQuestion