Совместимый код для полугруппового моноидного предложения

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

0 ответов

Другие вопросы по тегам