当前位置: 首页 > 知识库问答 >
问题:

什么是自由单子?

吴炎彬
2023-03-14

我看到自由单子这个词时不时地出现了一段时间,但每个人似乎只是在使用/讨论它们,而没有给出它们是什么的解释。那么:什么是自由单子?(我会说我熟悉单子和Haskell基础,但对范畴理论只有非常粗略的知识。)

共有1个答案

翟新
2023-03-14

试图在这里的简单答案和完整答案之间提供一个“桥梁”答案。

所以“自由单子”从任何“函子”中构建一个“单子”,所以让我们按顺序来处理这些。

有些东西是类型级别的形容词,这意味着他们接受了一个类型名词,比如“整数”,然后给你一个不同的类型名词,比如“整数列表”或“带整数的字符串对”,甚至“用整数生成字符串的函数”。要表示任意形容词,让我使用代理词“blue”。

一个单子是一个函子

  1. 普遍适用,给定任意X,我可以构造一个蓝色的X,
  2. 可以重复而不太改变意思。因此,在某种意义上,蓝色-蓝色X与蓝色X是相同的。

这意味着,有一个规范函数,将任何蓝色-蓝色-折叠成蓝色-。(当然,我们还添加了一些定律来使一切变得正常:如果其中一层蓝色来自通用应用程序,那么我们只想抹去该通用应用程序;此外,如果我们将一个蓝-蓝-蓝X平移为一个蓝X,那么无论我们先折叠前两个蓝色还是先折叠后两个蓝色都不会有什么不同。)

无论如何,“一个程序,产生一个程序,产生一个int”并不比“一个程序,产生一个int”买多,所以这是一个单子。

与函子不同,单子不是唯一的单子。对于一个给定的函子,并不只有一个单子实例。例如“一对int和__”,你用这个int做什么?你可以加它,你可以乘它。如果将其设置为可空整数,则可以保留最小的非空值或最大的非空值,或最左边的非空值或最右边的非空值。

对于给定函子的自由单子是“最多”的构造,它只是“对于任意n=0,1,2,...一个自由的蓝色X是一个蓝色nX”。

 类似资料:
  • 我不知道免费单子是用来做什么的,也不知道单子转换器库是什么。我也听说过mtl和自由单子的辩论,但我不确定是什么,因为我在互联网上找不到任何关于这一点的讨论。 有人能解释一下这场争论是关于什么的吗?

  • 在Mark Seemann的博客文章和示例中,我第一次看到了免费单子作为构建纯代码和IO代码之间边界的一种方式。我的基本理解是,一个免费的单子可以让您构建一个纯函数的程序(抽象语法树-AST),然后解释器将其翻译成一系列不纯的过程调用。因此,这个解释器将AST的纯操作转换为一系列的一元IO操作。 我想知道这是否复制了Haskell运行时已经在IO Monad上做的事情。如果我认为IO没有什么特别的

  • 在范畴理论中,一个单子是两个伴随函子的组合。例如,也许单子是由遗忘函子组成的自由点集函子。同样地,列表单子是由遗忘函子组成的自由么半函子。 半群是最简单的代数结构之一,所以我想知道编程是否可以从更复杂的结构中受益。我在标准的Haskell包中没有找到免费的组单子,所以我将在这里定义它 自由环和向量空间(它们总是自由的)呢? 对于任何代数结构,一个范畴自由函子的存在意味着Haskell调用fold的

  • 很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。既然 synchronized 里面的代码执行得非常快,不妨让等待锁的线程不要被阻塞,而是在 synchronized 的边界做忙循环,这就是自旋。如果做了多次循环发现还没有获得锁,再阻塞,这样可能是一种更好的策略。

  • 接通微机的电源,系统将执行一个自我检查的例行程序。这是BIOS功能的一部分,通常称为POST——上电自检(Power On Self Test)。     完整的POST自检包括对CPU、系统主板、基本的640KB内存、1MB以上的扩展内存、系统ROM BIOS的测试;CMOS中系统配置的校验;初始化视频控制器,测试视频内存、检验视频信号和同步信号,对CRT接口进行测试;对键盘、软驱、硬盘及CD-

  • HTML 表单的主要作用是接收用户的输入,当用户提交表单时,浏览器将用户在表单中输入的数据打包,并发送给服务器,从而实现用户与Web服务器的交互。 表单是控件的容器,一个表单由form元素、表单控件和表单按钮三部分组成: 1) form元素:用来创建表单,并通过 action、method和enctype三个属性,来设置表单的提交路径、提交方式、编码类型。 2) 表单控件:主要用来收集用户数据,包