Можете ли вы сделать экземпляр класса не для типа, а для всего класса в Haskell?

Предположим, я хочу сделать все числа экземпляромMonoid, Вместо того, чтобы создавать экземпляр для каждогоNum как это:

instance Monoid Int where
  mappend = (+)
  mempty = 0

instance Monoid Float where
  mappend = (+)
  mempty = 0.0

-- etc

Есть ли что-то подобное?

instance Num t => Monoid t where
  mappend = (+)
  mempty = 0
редактировать

Некоторые отвечают с расширениями GHC и предупреждают о потенциальных проблемах; Я нашел это информативным, но я думаю, что буду придерживатьсяSum, Product и всеcoerce делает.

Ответы на вопрос(2)

Ваш ответ на вопрос