问题标签 [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.

0 投票
2 回答
245 浏览

haskell - Haskell 表达学派修复函数

所以我正在阅读 Paul Hudak 的书“The Haskell School of Expression”,并在那里进行了一项练习。

来了

假设函数 fix 定义为

主要类型是fix什么?我认识的那个是b -> b -> b

但是我不明白定义的方式fix,它不会进入无限递归吗?

另外,remainder函数定义为

重写remainderusingfix使其不递归。

0 投票
2 回答
615 浏览

haskell - Free 和 Cofree 的不动点函子

为了清楚起见,我不是在谈论free monad 看起来很像应用于 functorFree f的定点组合器,即基本上是f. (并不是说这不有趣!)

我所说的是 的定点,即与自身同构的Free, Cofree :: (*->*) -> (*->*)函子。fFree ff

背景:今天,为了巩固我对自由 monad 相当缺乏的理解,我决定只为不同的简单函子写一些它们,forFreeforCofree,看看它们会同构到哪些更知名的 [co] monad . 令我特别感兴趣的是与(意思是,将任何类型映射到无人居住的函子)同构的发现。Cofree EmptyEmptyConst Void好吧,也许这只是愚蠢的——我发现如果你把空垃圾放进去,你就会把空垃圾拿出来,是的!——但是,嘿,这是范畴论,整个宇宙从看似微不足道的事物中升起……对吧?

直接的问题是,如果Cofree有这样一个固定点,那么Free呢?好吧,它当然不可能Empty,因为那不是单子。快速嫌疑人将是附近的东西,例如Const ()or Identity,但不是:

事实上,Free总是添加一个额外的构造函数的事实表明,任何作为不动点的函子的结构都必须已经是无限的。但奇怪的是,如果Cofree有这样一个简单的固定点,Free应该只有一个更复杂的固定点(就像FixFree a = C (Free FixFree a)Reid Barton 在评论中提出的修复)。

无聊的事实只是Free没有“偶然固定点”,只是巧合而已Cofree,还是我错过了什么?

0 投票
2 回答
540 浏览

haskell - 在已经是 Functor 的数据类型上使用“Fix”的递归方案?

仍在使用我的文本编辑器Rasa

目前我正在构建用于跟踪视口/拆分的系统(类似于 vim 拆分)。对我来说,将这个结构表示为一棵树似乎很自然:

这很好用,我将我View的 s 存储在树中,然后我可以遍历/fmap 来改变它们,它也与镜头包非常吻合!

我最近一直在学习递归方案,这似乎对他们来说是一个合适的用例,因为树是一个递归数据结构。

我设法弄清楚它足以构建 Fixpoint 版本:

但是,现在 Functor 实例被r;

我尝试了一些变体

但它令人窒息,因为 window 是一个类型的同义词。

和:

这也失败了;

  1. 是否仍然可以定义 fmap/traverse over a?或者我是否需要使用递归方案原语来执行这些操作?我要实现双函子吗?实例实现会是什么样子?

其余类型都在这里,项目无法编译,因为我没有合适的 Functor 实例用于 Window...

谢谢!!

0 投票
1 回答
563 浏览

haskell - Haskell:为 Fix 类型派生 Show

我正在尝试使用recursion-schemes. 我希望能够打印它。

错误信息:

我如何使T1派生Show

0 投票
2 回答
708 浏览

haskell - McCarthy 91 函数的工作原理

我有以下基于麦卡锡 91 原则的功能:

mc91 85当我输入我得到的前奏曲时91

我无法配置它,它是如何扩展的,为什么我有91.

0 投票
1 回答
271 浏览

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 在与给定单元周围的社区合作时是否有用?

随时提出任何澄清性问题,并帮助我扩展我的知识和修复直觉!

谢谢!

0 投票
2 回答
496 浏览

haskell - 如何使用带有 Fix 类型的 Functor 实例

假设我想要一个非常通用的ListF数据类型:

现在我可以使用这个数据类型Data.Fix来构建一个 f 代数

但是我如何使用这种非常通用的数据类型ListF来创建我认为Functor递归列表的默认实例(映射到列表中的每个值)

我想我可以使用 Bifunctor(映射第一个值,遍历第二个值),但我不知道它怎么能用Data.Fix.Fix

0 投票
1 回答
3166 浏览

haskell - Ed Kmett的递归方案包中的Fix、Mu和Nu有什么区别

在 Ed Kmett 的recursion-scheme包中,有三个声明:

这三种数据类型有什么区别?

0 投票
1 回答
1925 浏览

haskell - 了解 Haskell 中的 Fix 数据类型

这篇关于 Haskell 中的 Free Monads 的文章中,我们给出了一个 Toy 数据类型,定义如下:

修复定义如下:

它允许通过保留通用类型来嵌套 Toy 表达式:

我了解固定点如何用于常规功能,但我看不到这里的类型是如何减少的。编译器遵循哪些步骤来评估表达式的类型?

0 投票
2 回答
250 浏览

haskell - 只能用非严格评估的语言输入修复吗?

我为 Javascript 编写了一个运行时类型检查器,但无法输入fix

传递给的阶乘函数fix具有简化类型(Int -> Int) -> Int -> Int

当我尝试在 Javascript 中重现表达式时,我的类型检查器由于无效约束而失败Int ~ Int -> Int

fix (const "hallo")也失败并且类型检查器抱怨它不能构造一个无限类型(否定发生检查)。

对于其他组合器,我的统一结果与 Haskell 的一致。

我的统一算法可能是错误的还是fix只能在非严格环境中输入?

[编辑]

fix在 Javascript 中的实现是const fix = f => f(f).