我“发明”了一种递归方案,它是折叠映射的一般化。使用折叠映射对数据结构进行折叠时,您无法访问子术语,只能访问折叠的子结果:{-# LANGUAGE DeriveFunctor #-} import qualified Data.Map as M newtype Fix f = Fix { u...
最近我发现了一种在Java中以某种迂回的方式来模拟高阶类型的方法,具体实现可以参考highj interface H<F, T> { } 在这里,H编码一个更高阶的类型,它接受一个类型参数F,而F本身需要一个参数T。 现在我想知道,我们能否使用这个实现一些更高级别的构造?例...
我有一个递归数据类型,它具有Functor实例: 我有一个递归数据类型,它具有Functor实例:data Expr1 a = Val1 a | Add1 (Expr1 a) (Expr1 a) deriving (Eq, Show, Functor) 现在,我有兴趣修改这种数据类...
在写完这篇文章后,我决定付诸行动,将我的一个旧项目转换为使用recursion-schemes。 所涉及的数据结构是懒惰的kdtree。请查看具有显式递归和隐式递归的实现。 这主要是一种沿着以下方向进行的简单转换:data KDTree v a = Node a (Node v a) (N...
从http://research.microsoft.com/en-us/um/people/emeijer/Papers/meijer94more.pdf第3页可知: 一般情况下,猫态射并不满足合成的封闭性。 在什么条件下,猫态射才能组合成一个猫态射?更具体地(假设我正确理解了该...
我最近学习了一些关于F-代数的知识:https://www.fpcomplete.com/user/bartosz/understanding-algebras。我想将这种功能扩展到更高级的类型(索引和高阶)。此外,我查看了“使Haskell晋升”(http://research.micros...
我正在尝试学习有关Catamorphism的知识,我已经阅读了维基百科文章和Inside F#博客上该主题系列的前几篇文章。 我了解它是折叠的一般化(即将许多值的结构映射到一个值,包括将值列表映射为另一个列表)。 我发现fold-list和fold-tree是一个典型的例子。 是否能够在C...
使用以下针对自然数的折叠函数,我可以实现各种算术算法,而无需处理递归: cataNat :: b -> (b -> b) -> Natural -> b cataNat zero succ = go where go n = if (n <= 0) ...
我正在努力理解“anamorphism”的概念。 在函数式编程中,anamorphism是对列表展开概念的一般化。形式上,anamorphisms是通用函数,可以递归地构造某种类型的结果,并且由决定构造下一个单步的函数参数化。 它的对偶,catamorphism,在这篇文章中得到了很好的描...
我迫不及待地希望了解与此SO问题相关的catamorphism:链接 :) 我只练习过《Real World Haskell》教程的开始部分。因此,也许我现在会问太多了,如果是这样,请告诉我应该学习哪些概念。 下面,我引用了维基百科关于catamorphism的代码示例链接. 我想知道您...