Semigroup
is becoming a superclass of 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
BattleMode
之后,我的进一步计划是什么。你能发现我的方法有什么问题吗?