如果我发现某些内容属于Monoid
或Monad
,我会全部使用各种有趣的功能,例如foldMap
,sequence
甚至{{ 1}}。他们让我开心。
如果我发现某些内容是mapM
,我会得到什么?除了重载Category
和id
之外,我还能获得什么乐趣吗?
答案 0 :(得分:9)
除了重载id和(。)之外,我还能获得什么乐趣吗?
那么,你也应该(应该)获得与他们相关的法律:
"identity/left" forall p .
id . p = p
"identity/right" forall p .
p . id = p
"association" forall p q r .
(p . q) . r = p . (q . r)
作为旁注:
你没有得到像mapM
或foldMap
那样有趣的功能的原因是,说某事是一个类别实际上对它很少说。我认为最有用的函数是Control.Category
中定义的函数,有时可以使代码更易于阅读:>>>
和<<<
答案 1 :(得分:7)
Control.Category
只是Control.Arrow
的基础工作,而这正是您从中获得有趣功能的地方。