3

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我无法掌握。你能发现我的方法有什么问题吗?

4

0 回答 0