Endofunción como monoide

Estoy intentando esto (con fines de aprendizaje):

{-# LANGUAGE FlexibleInstances #-}

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

esperandoid <> id ser igual aid . id

Sin embargo, con(id <> id) 1 Recibo este error:

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

¿Qué debo cambiar para ejecutarlo?

Es solo para comprender mejor los monoides y las clases de tipo Haskell, no para un uso práctico.

Respuestas a la pregunta(2)

Su respuesta a la pregunta