问题 Control.Category有什么用?


如果我发现某事是一个 Monoid 要么 Monad,我得到所有使用各种有趣的功能,如 foldMapsequence 甚至 mapM。他们让我开心。

如果我发现有什么东西,我会得到什么 Category?除了超载之外我还能获得什么乐趣吗? id 和 (.) ?


11653
2017-10-19 07:44


起源

与所有抽象一样,有一个权衡:要么你可以用它们做很多事情,要么你发现很多东西都是它们的实例。类别尽可能地走向“很多东西都是它们的实例”的权衡方面:该死的几乎每个数学概念都有一个潜在的类别。您为所有这些想法之间的共同术语付出的代价是,仅仅将某个类别称为某个类别并不能为您提供更多信息。如果你想要更多,你必须在这个词上悬挂形容词:“cartesion closed category”,或“braided monoidal category”等。 - Daniel Wagner


答案:


除了重载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,有时使代码更容易阅读: >>> 和 <<<


9
2017-10-19 07:49



附录:“维基百科说”类别理论被认为是“一般的抽象无意义”(以一种好的方式),因为它非常抽象。


Control.Category 只是基础工作 Control.Arrow,这就是你从中获得有趣功能的地方。


7
2017-10-19 08:17