Haskell中的分类结构

时间:2018-06-07 07:28:53

标签: haskell category-theory

Hask通常被认为是其对象是类型而且态射是函数的类别。 但是,我已经看到Conor McBride(@pigworker)警告多次使用Hask123):

  
      
  • 我不鼓励谈论Hask类别"因为它潜意识地阻止你在Haskell编程中寻找其他分类结构。

  •   
  • 注意,我不喜欢使用" Hask"作为Haskell类型和函数的类别的名称":我担心将一个类别标记为Haskell类别会带来令人遗憾的副作用,使我们对Haskell编程中的其他分类结构的财富感到盲目。这是一个陷阱。

  •   
  • 我希望人们不会称它为“Hask"”,但它有可能限制想象力。

  •   

我们在Haskell中可以看到哪些其他类别?

one of his answers中,他触及了其中的一些想法,但我想知道是否有人能够扩展它;我想知道是否还有更多的例子。

  

[...]潜伏着无处不在的大量分类结构,当然有更多类别的分类结构(可能但不一定)。我特别喜欢索引族集之间的仿函数。

3 个答案:

答案 0 :(得分:6)

Haskell also form a category中的约束。对象是约束,箭头表示"this constraint implies this other constraint"。因此,每个约束都意味着自己,并且Monad fApplicative f之间,Ord aEq a之间以及Ord aOrd [a]之间都有一个箭头。< / p>

它是thin category,因此两个对象之间最多只有一个箭头。

答案 1 :(得分:4)

加布里埃尔·冈萨雷斯(Gabriel Gonzalez)在博客中写到了这一点。这是一篇这样的帖子: http://www.haskellforall.com/2012/08/the-category-design-pattern.html

在其中,他称Hask为“功能类别”,并且还讨论了“Kleisli类别”和“管道类别”。这些都是Haskell中类别类型类的实例的示例。 Haskell中的Category类型类是您可以在Haskell中找到的类别的子集。

答案 2 :(得分:2)

我曾经上传了一个教育套餐,演示了一个例子。我叫它MHask。

http://hackage.haskell.org/package/MHask

从hackage页面复制:

MHask是

的类别
  • 对象是具有Prelude.Monad实例的Haskell类型(*→*)
  • 从对象m到对象n的箭头是形式的Haskell函数(forall x.m x→n x)
  • 箭头组合仅仅是Haskell函数组合的专业化
  • 对象m的标识箭头是Haskell中的Prelude.id函数,专用于(forall x .m x→m x)
告诫者;我很久没有看过这个了。可能有错误。