Можете ли вы сделать экземпляр класса не для типа, а для всего класса в 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
делает.