12得票2回答
每种类型都有唯一的消解吗?

最近我终于开始感觉理解“折叠”(catamorphism)了。我在一篇最近的回答中写了一些关于它们的事情,但简单来说,我会说一个类型的折叠过程抽象出了递归遍历该类型值的过程,并且该类型上的模式匹配被实现为每个构造函数的一个函数。虽然我对这一点或者我的上面链接中更长版本的回答有任何修正都表示欢迎...

10得票4回答
如何为一个通用递归方案构建的数据类型提供一个Functor实例?

我有一个递归数据类型,它具有Functor实例: 我有一个递归数据类型,它具有Functor实例:data Expr1 a = Val1 a | Add1 (Expr1 a) (Expr1 a) deriving (Eq, Show, Functor) 现在,我有兴趣修改这种数据类...

15得票1回答
F#中的Catamorphism

我正在阅读维基百科上有关“catamorphisms”(一种函数式编程概念)的文章,目前我已经能够在 F# 中复制 Haskell 的示例,但有一个部分我还没做到:type Algebra f a = f a -> a -- the generic f-algebras newtype...

11得票2回答
Option、Either等类型的fold与Traversable上的fold有什么关系?

Scalaz提供了一个名为fold的方法,用于各种ADT,例如Boolean,Option[_],Validation[_, _],Either[_, _]等。该方法基本上需要使用与给定ADT的所有可能情况对应的函数。换句话说,就是下面所示的模式匹配:x match { case Case...

17得票4回答
复合多个“猫amorphism”时,何时为“猫amorphism”?

从http://research.microsoft.com/en-us/um/people/emeijer/Papers/meijer94more.pdf第3页可知: 一般情况下,猫态射并不满足合成的封闭性。 在什么条件下,猫态射才能组合成一个猫态射?更具体地(假设我正确理解了该...

11得票2回答
递归方案是否可以用于比较两个树?

我有这个抽象语法树data ExprF r = Const Int | Add r r type Expr = Fix ExprF 我想要比较x = Fix $ Add (Fix (Const 1)) (Fix (Const 1)) y = Fix $ Add (Fix (Const 1)...

16得票2回答
Catamorphism和Haskell中的树遍历

我迫不及待地希望了解与此SO问题相关的catamorphism:链接 :) 我只练习过《Real World Haskell》教程的开始部分。因此,也许我现在会问太多了,如果是这样,请告诉我应该学习哪些概念。 下面,我引用了维基百科关于catamorphism的代码示例链接. 我想知道您...

23得票1回答
能否让GHC优化(消除)通用函数例如折叠函数(catamorphisms)?

我很喜欢以一种通用的方式使用折叠/展开函数来处理范畴学中的catamorphisms/anamorphisms的想法,但我认为它有一个显著的性能缺陷: 假设我们想以范畴化的方式处理树形结构——使用通用的catamorphism function来描述不同的折叠过程: newtype Fix...

7得票1回答
Scala的Option类型中,fold函数是一个范畴论中的折叠函数吗?

这个问题的答案表明,在Scala中,Option的fold方法是一个catamorphism。从维基百科上可以看到,catamorphism是“从初始代数到其他代数的唯一同态。该概念已应用于函数式编程中的折叠”。所以这似乎是合理的,但我需要了解F-代数类别中的初始代数作为初始对象。 因此,...

12得票2回答
如何使catamorphisms能够与参数化/索引类型一起使用?

我最近学习了一些关于F-代数的知识:https://www.fpcomplete.com/user/bartosz/understanding-algebras。我想将这种功能扩展到更高级的类型(索引和高阶)。此外,我查看了“使Haskell晋升”(http://research.micros...