问题标签 [fixpoint-combinators]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell 表达学派修复函数
所以我正在阅读 Paul Hudak 的书“The Haskell School of Expression”,并在那里进行了一项练习。
来了
假设函数 fix 定义为
主要类型是fix
什么?我认识的那个是b -> b -> b
但是我不明白定义的方式fix
,它不会进入无限递归吗?
另外,让remainder
函数定义为
重写remainder
usingfix
使其不递归。
haskell - Free 和 Cofree 的不动点函子
为了清楚起见,我不是在谈论free monad 看起来很像应用于 functorFree f
的定点组合器,即基本上是f
. (并不是说这不有趣!)
我所说的是 的定点,即与自身同构的Free, Cofree :: (*->*) -> (*->*)
函子。f
Free f
f
背景:今天,为了巩固我对自由 monad 相当缺乏的理解,我决定只为不同的简单函子写一些它们,forFree
和forCofree
,看看它们会同构到哪些更知名的 [co] monad . 令我特别感兴趣的是与(意思是,将任何类型映射到无人居住的函子)同构的发现。Cofree Empty
Empty
Const Void
好吧,也许这只是愚蠢的——我发现如果你把空垃圾放进去,你就会把空垃圾拿出来,是的!——但是,嘿,这是范畴论,整个宇宙从看似微不足道的事物中升起……对吧?
直接的问题是,如果Cofree
有这样一个固定点,那么Free
呢?好吧,它当然不可能Empty
,因为那不是单子。快速嫌疑人将是附近的东西,例如Const ()
or Identity
,但不是:
事实上,Free
总是添加一个额外的构造函数的事实表明,任何作为不动点的函子的结构都必须已经是无限的。但奇怪的是,如果Cofree
有这样一个简单的固定点,Free
应该只有一个更复杂的固定点(就像FixFree a = C (Free FixFree a)
Reid Barton 在评论中提出的修复)。
无聊的事实只是Free
没有“偶然的固定点”,只是巧合而已Cofree
,还是我错过了什么?
haskell - 在已经是 Functor 的数据类型上使用“Fix”的递归方案?
仍在使用我的文本编辑器Rasa。
目前我正在构建用于跟踪视口/拆分的系统(类似于 vim 拆分)。对我来说,将这个结构表示为一棵树似乎很自然:
这很好用,我将我View
的 s 存储在树中,然后我可以遍历/fmap 来改变它们,它也与镜头包非常吻合!
我最近一直在学习递归方案,这似乎对他们来说是一个合适的用例,因为树是一个递归数据结构。
我设法弄清楚它足以构建 Fixpoint 版本:
但是,现在 Functor 实例被r
;
我尝试了一些变体
但它令人窒息,因为 window 是一个类型的同义词。
和:
这也失败了;
- 是否仍然可以定义 fmap/traverse over
a
?或者我是否需要使用递归方案原语来执行这些操作?我要实现双函子吗?实例实现会是什么样子?
其余类型都在这里,项目无法编译,因为我没有合适的 Functor 实例用于 Window...
谢谢!!
haskell - Haskell:为 Fix 类型派生 Show
我正在尝试使用recursion-schemes
. 我希望能够打印它。
错误信息:
我如何使T1
派生Show
?
haskell - McCarthy 91 函数的工作原理
我有以下基于麦卡锡 91 原则的功能:
mc91 85
当我输入我得到的前奏曲时91
。
我无法配置它,它是如何扩展的,为什么我有91
.
haskell - 使用 Comonad 修复组合器
所以我最近一直在试验定点,终于通过常规的定点挣扎,足以发现一些用途;现在我正在转向comonadic固定点,我担心我被卡住了;
以下是我尝试过的和无效/无效的一些示例:
所以我从勒布定理开始。列表的每个元素都是一个函数,它采用最终结果来计算其答案;这让我可以进行“电子表格”计算,其中值可以依赖于其他值。
好的,所以我有基本的修复工作,是时候继续使用comonad类型了!这里有一些简单的comonads用于示例:
好的,以下组合子来自Control.Comonad;
我开始尝试 wfix:
在这种情况下,这似乎通过w a -> a
在 w 上调用第一个直到达到解决方案来工作const 0
;这就说得通了。我们也可以用磁带做到这一点:
K,我想我得到了那个,但是下一个我有点卡住了,我似乎对 cfix 应该做什么没有直觉。当我评估它时,即使是我能想到的最简单的事情也会永远旋转。即使尝试使用 getOne 提取流的第一个元素也会失败。
与 kfix 类似;即使是简单的尝试似乎也不会终止。我对 kfix 的理解是,每个“槽”中的函数都传递了一个被评估的comonad 的副本,该副本集中在那个位置;是这样吗?
我尝试对此使用“getOne”:
这是使用磁带的有限尝试,但也无法运行:
所以; 归结为我的问题,有人可以提供一些使用 cfix 和 kfix 的可运行(非平凡)示例,并解释它们是如何工作的吗?我计划使用 kfix 最终进行“康威的生活游戏”风格实验,我认为 kfix 在与给定单元周围的社区合作时是否有用?
随时提出任何澄清性问题,并帮助我扩展我的知识和修复直觉!
谢谢!
haskell - 如何使用带有 Fix 类型的 Functor 实例
假设我想要一个非常通用的ListF
数据类型:
现在我可以使用这个数据类型Data.Fix
来构建一个 f 代数
但是我如何使用这种非常通用的数据类型ListF
来创建我认为Functor
递归列表的默认实例(映射到列表中的每个值)
我想我可以使用 Bifunctor(映射第一个值,遍历第二个值),但我不知道它怎么能用Data.Fix.Fix
?
haskell - Ed Kmett的递归方案包中的Fix、Mu和Nu有什么区别
在 Ed Kmett 的recursion-scheme
包中,有三个声明:
这三种数据类型有什么区别?
haskell - 了解 Haskell 中的 Fix 数据类型
在这篇关于 Haskell 中的 Free Monads 的文章中,我们给出了一个 Toy 数据类型,定义如下:
修复定义如下:
它允许通过保留通用类型来嵌套 Toy 表达式:
我了解固定点如何用于常规功能,但我看不到这里的类型是如何减少的。编译器遵循哪些步骤来评估表达式的类型?
haskell - 只能用非严格评估的语言输入修复吗?
我为 Javascript 编写了一个运行时类型检查器,但无法输入fix
:
传递给的阶乘函数fix
具有简化类型(Int -> Int) -> Int -> Int
。
当我尝试在 Javascript 中重现表达式时,我的类型检查器由于无效约束而失败Int ~ Int -> Int
。
fix (const "hallo")
也失败并且类型检查器抱怨它不能构造一个无限类型(否定发生检查)。
对于其他组合器,我的统一结果与 Haskell 的一致。
我的统一算法可能是错误的还是fix
只能在非严格环境中输入?
[编辑]
我fix
在 Javascript 中的实现是const fix = f => f(f)
.