【发布时间】:2014-08-19 23:50:15
【问题描述】:
如果我们将我们对类别的理解限制为 Haskell 中常见的 Category 类:
class Category c where
id :: c x x
(>>>) :: c x y -> c y z -> c x z
那么假设Arrow 是Category,它还可以:
class Category c => Arrow c where
(***) :: c x y -> c x' y' -> c (x,x') (y,y')
(&&&) :: c x y -> c x y' -> c x (y,y')
我们可以很容易推导出:
first :: c x y -> c (x,z) (y,z)
first a = a *** id
second :: c x y -> c (z,x) (z,y)
second a = id *** a
或者我们可以从first和second推导出(***):
a1 *** a2 = first a1 >>> second a2
我们也可以推导出来:
dup :: c x (x,x)
dup = id &&& id
或者我们可以在给定dup和(***)的情况下推导出(&&&):
a1 &&& a2 = dup >>> (a1 *** a2)
我的观点和问题是什么?是这样的:
没有arr 的Arrow 是什么?它似乎完全连贯且有用。是否有任何不涉及arr 并在此处保持不变的箭头法(除了类别法)?这在范畴论中意味着什么?
我基本上是从 reddit 上偷来的这个问题,但对其进行了概括和阐述: http://www.reddit.com/r/haskell/comments/2e0ane/category_with_fanout_and_split_but_not_an_arrow/
【问题讨论】:
-
我在my constrained-categories project 有这门课,有点愚蠢地叫
Morphism。一些法律仍然有意义,即使周围没有任何功能......像fst或const这样的东西是该包中其他类的方法,需要用于正确制定法律。如果 Edward、Conal 或其他人还没有在某个地方做过那件事,我会感到惊讶,但我不知道叫什么名字...... -
您可能想了解Generalized Arrows。
标签: haskell arrows category-theory