我正在关注这个博客,在haskell中编写一个简单的http服务器,
使用情况>>>对我来说并不清楚.这段代码片段做了什么?
handleHttpConnection r c = runKleisli
(receiveRequest >>> handleRequest r >>> handleResponse) c >>
close c
Run Code Online (Sandbox Code Playgroud)
在这个链接上,我看到了<<<
let h = arr (++ "!")
<<< arr foo
<<< Kleisli bar
<<< arr id
Run Code Online (Sandbox Code Playgroud)
haskell arrows category-theory function-composition category-abstractions
我在前一个问题的答案中争论说,可以在Haskell中表示原始递归函数(PRF)和single或的单个额外值的并集undefined.这个论点是基于原始递归函数的公理结构的直接翻译; 它需要一些语言扩展和关于函数arity的类型级推理.是否有可能在更惯用的Haskell中表示一组等效的原始递归函数?
理想情况下,PRF的惯用语表示应能满足以下所有条件:
Category实例除了原始递归的要求
undefined输入功能都undefined适用于所有输入.这将PRF集限制为单个不可避免的额外值⊥,而不是包含多个部分递归函数.这意味着while循环或类似的部分递归函数的任何定义都应该是undefined.我注意到原始递归函数的公理就像Category法则一样,Arrow没有arr(实际上它与之相反arr),而且只有自然数才有效的有限形式的循环.
Control.Category.Constrained是一个非常有趣的项目,它展示了笛卡尔封闭类别的类 - Curry.
然而,我不明白为什么我们会想到所有允许curry和uncurry(Hom(X * Y, Z) ? Hom(X, Z^Y)就范畴论而言)的笛卡尔封闭范畴。维基百科说这种性质只适用于局部小的笛卡尔封闭类别。在这个帖子下,很多人建议Hask本身并不小(另一方面,每个人都说Hask不是笛卡尔封闭类别,我认为这是一种纯粹且无趣的形式主义)。
在Math.SE上的这篇文章中,假设所有类别都在本地较小。但它是从我们讨论属性的数学角度给出的。我想知道为什么我们决定专注于和as的方法。是不是因为几乎每个了解 Haskell 的人也都知道这些函数?还是有其他原因?curryuncurryCurry