Совместимый код для полугруппового моноидного предложения
Semigroup
становится суперклассомMonoid
, Я прочитал рекомендации на этой странице для написания совместимого кода, но я также не люблю условно зависеть от semigroups
пакет ни ставить мой mappend
код в объявлении верхнего уровня.
Моя попытка сейчас
#if MIN_VERSION_base(4,9,0)
import Data.Semigroup
#endif
#if MIN_VERSION_base(4,9,0)
instance Semigroup Foo
#endif
instance Monoid Foo where
mempty = …
mappend a b = …
Semigroup
класс, кажется, по умолчанию <> = mappend
поэтому мне не нужно ничего реализовывать там, но я думаю, что я мог бы также написать это.
Будет ли этот код продолжать работать в будущем?
В настоящее время он работает в моей настройке, но я не могу протестировать все возможные компиляторы и базовые пакеты, особенно будущие. Что именно планируется дальше в будущем Monoid
ускользает от моего понимания. Можете ли вы определить какие-либо проблемы с моим подходом?