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

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

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)...

11得票1回答
一个递归方案的库实现

我“发明”了一种递归方案,它是折叠映射的一般化。使用折叠映射对数据结构进行折叠时,您无法访问子术语,只能访问折叠的子结果:{-# LANGUAGE DeriveFunctor #-} import qualified Data.Map as M newtype Fix f = Fix { u...

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

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

11得票1回答
原始递归和折叠函数之间有什么联系?

使用以下针对自然数的折叠函数,我可以实现各种算术算法,而无需处理递归: cataNat :: b -> (b -> b) -> Natural -> b cataNat zero succ = go where go n = if (n <= 0) ...

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

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

9得票1回答
什么是变形(anamorphism),在C#中它是什么样子?

我正在努力理解“anamorphism”的概念。 在函数式编程中,anamorphism是对列表展开概念的一般化。形式上,anamorphisms是通用函数,可以递归地构造某种类型的结果,并且由决定构造下一个单步的函数参数化。 它的对偶,catamorphism,在这篇文章中得到了很好的描...

7得票1回答
如何使用Cofree注释处理AST?

我有一个简单的 Expr AST,我可以轻松地将它转换为 String。 import Prelude hiding (Foldable) import qualified Prelude import Data.Foldable as F import Data.Functor.Folda...

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

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

7得票2回答
我可以用“递归方案”中的“cata”函数来编写 `foldr` (或 `foldMap`)吗?

我最近阅读了有关递归方案的内容,其中将折叠函数描述为类似于广义的foldr。 在所有情况下,是否可以通过cata编写Foldable实例(通过foldr或foldMap)?