IO Monad 在什么意义上是纯粹的?

2024-01-23

我已经将 IO monad 描述为 State monad,其中状态是“现实世界”。这种 IO 方法的支持者认为,这使得 IO 操作变得纯粹,就像引用透明一样。这是为什么?从我的角度来看,IO monad 内部的代码似乎有很多可观察到的副作用。另外,是否有可能描述几乎任何非纯函数,例如现实世界的函数?例如,我们不能将 C 的 malloc 视为一个接受 a 的函数吗?真实世界和一个 Int 并返回一个指针和一个真实世界,就像在 IO monad 中一样真实世界是隐式的?

注意:我知道什么是 monad 以及它是如何使用的。请不要回复随机 monad 教程的链接,除非它专门解决了我的问题。


我认为我听到的最好的解释实际上是最近在 SO 上。IO Foo是创建一个的秘诀Foo。另一种常见的、更字面的说法是,它是一个“产生一个Foo”。它可以被执行(多次)来创建一个Foo或死于尝试。菜谱/程序的执行是我们最终想要的(否则为什么要写一个?),但是由一个IO我们代码中的操作就是配方本身。

该配方是一个纯值,与String是一个纯值。食谱可以以有趣的、有时甚至令人惊讶的方式组合和操纵,但这些食谱可以组合的方式有很多种(除了公然非纯粹的方法)unsafePerformIO, unsafeCoerce等)都是完全引用透明的、确定性的,以及所有这些好东西。所得到的配方绝对不依赖于除了它所建立的配方之外的任何事物的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IO Monad 在什么意义上是纯粹的? 的相关文章

  • 帮助我理解这段 Scala 代码:scalaz IO Monad 和隐式

    这是后续this https stackoverflow com questions 7404495 help me understand this scala code scalaz io monad问题 这是我试图理解的代码 它来自ht
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数
  • Haskell Fibonacci 达到最大指定数?

    我有一个已启动并正在运行的 Haskell 函数 但它做错了事情 它应该输出最多指定最大数量的斐波那契数列 像这样 fibonacciSequence 86 1 1 2 3 5 8 13 21 33 54 我的代码当前输出斐波那契数列中的前
  • 管道 - 将多个来源/生产者合并为一个

    我正在使用读取文件sourceFile 但我还需要在处理操作中引入随机性 我认为最好的方法是拥有一个这样的制片人 Producer m StdGen ByteString 其中 StdGen 用于生成随机数 我打算让生产者执行 source
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • 使用 Haskell 绘制图表

    是否可以使用 Haskell 绘制一个简单的图表 你们中的任何人都可以告诉我该怎么做吗 该图应至少包含 3 个点 Haskell 图表 https github com timbod7 haskell chart似乎不错 The wiki
  • 为什么我需要一块一块地读取文件来缓冲?

    我看到了以下用于将文件放入数组的代码 该数组又用作将其插入 blob 列的 SQL 命令的参数 using FileStream fs new FileStream soubor FileMode Open FileAccess Read
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 这个实例有什么问题:ArrowApply Automaton?

    我希望 Automaton 有实例 ArrowApply 但 Control Arrow Transformer Automaton 没有 我认为下面的代码会表现良好 data Automaton b c Auto runAuto b gt
  • 如何使用类型系统编码和强制执行合法的 FSM 状态转换?

    假设我有一个类型Thing拥有国有财产A B C 合法的状态转换是A gt B A gt C C gt A 我可以写 transitionToA Thing gt Maybe Thing 这会返回Nothing if Thing处于无法转换
  • 如何测试自定义 StateT 的 Monad 实例?

    我正在学习 Monad Transformers 其中一个练习要求实现 Monad 实例StateT 我想使用以下方法测试我的实现是否符合 Monad 法则validity https github com NorfairKing vali
  • Cabal 无法安装依赖项,但如果直接询问可以安装它们

    我发现 Cabal 反复出现一个非常奇怪的问题 它影响了我获得可重复的 Haskell 构建的能力 我有一个带有沙箱的阴谋集团项目 如果我做cabal install 我收到以下形式的错误 Y failed during the build
  • 如何在Python 3中将文本流编码为字节流?

    将字节流解码为文本流很容易 import io f io TextIOWrapper io BytesIO b Test nTest n utf 8 f readline 在这个例子中 io BytesIO b Test nTest n 是
  • Haskell if-then-else 条件中的“解析输入错误”

    当我尝试编译以下 do 块时 它会抛出错误 输入 conn 上的解析错误 我尝试了许多不同的 if then else 语句配置 但均无济于事 在我添加条件之前 数据库逻辑就起作用了 所以这没有问题 else 中是否有太多行 有没有办法在不
  • HASKELL:解决河内塔

    下面的代码解决了 hanoi 使用预定义函数 moveLOD swapLOI 和 swapLID 返回移动列表的问题 MoveLOD 将 1 个圆盘从第一个位置移动到三元组第三个位置中的第三个销钉 此外 包含有关运动信息的字符串会堆积在字符
  • Haskell:确定函数数量的函数?

    可以写一个函数吗arity a gt Integer确定任意函数的数量 使得 gt arity map 2 gt arity foldr 3 gt arity id 1 gt arity hello 0 是的 这可以非常非常容易地完成 ar
  • Haskell 五个独特的 Wordle 单词

    为了好玩 我正在尝试解决 Matt Parker 在他的 Haskell 频道 Standup Maths in Haskell 频道的链接视频中谈到的与 Wordle 相关的问题 基本上 找到 5 个没有任何共同字母的 5 个字母单词 因
  • seq在haskell中代表什么

    我是 Haskell 的新手 刚刚进入惰性世界编程 我读到seq函数非常特殊 因为它强制使用严格的评估 以便在某些情况下更加有效 但我就是找不到什么seq代表字面意思 也许严格评估Q 它应该提醒您 顺序 或 顺序 因为它允许程序员指定其参数
  • Haskell 有 takeUntil 函数吗?

    目前我正在使用 takeWhile x gt x 1 x 89 l 从列表中获取最多为 1 或 89 的元素 但是 结果不包括这些标记值 Haskell 是否有一个标准函数可以提供这种变化takeWhile结果中包含哨兵 到目前为止 我对胡
  • 非单射封闭型族

    我确实有一段人为设计的代码 LANGUAGE DataKinds TypeFamilies data Foo Foo type family Id n Foo a where Id Foo a a data Bar n Foo Bar cl

随机推荐

  • 如何修剪字符之间的空白

    如何删除C 中字符之间的空格 Trim 可用于删除字符串开头和结尾的空格 例如 C Sharp Trim 结果 C Sharp 但如何将字符串变成CSharp 我们可以使用删除空格for or a for each与临时变量一起循环 但是有
  • 页面加载后 Javascript 运行函数

    我正在尝试用 Javascript 创建一个小型自动化脚本 我想使用 Opera 的用户脚本功能来定义要运行的外部脚本 并在网站上运行该脚本 我之前曾使用此功能来运行我用外部站点编写的脚本 效果很好 我需要等到页面加载才能运行脚本 但我似乎
  • python csv问题[重复]

    这个问题在这里已经有答案了 我只是在 python 中测试 csv 组件 但遇到了一些问题 我有一个相当标准的 csv 字符串 默认选项似乎都适合我的测试 但结果不应该将 1 2 3 4 连续分组 将 5 6 7 8 连续分组 非常感谢您提
  • Snowflake Python Pandas 连接器 - 使用 fetch_pandas_all 时出现未知错误

    我正在尝试使用 python pandas 连接器连接到雪花 我在 Windows 上使用 anaconda 发行版 但卸载了现有的连接器和 pyarrow 并使用此页面上的说明重新安装 https docs snowflake com e
  • Netbeans 热键关闭突出显示的搜索文本?

    我用谷歌搜索过这个问题 但没有找到 如果您知道如何操作 请分享 对于 7 0 工具 gt 选项 gt 键盘映射 gt 切换突出显示搜索 我的是 Alt Shift H
  • 如何在WCF中设置cookie并在调用Ajax的成功函数(或其他地方)中读取它

    我有一些 jQuery JavaScript 调用一个简单的 WCF Web 服务 对我来说 在 JavaScript 中设置 cookie 并在服务器端读取它相当容易 这是该代码 客户端 JavaScript document cooki
  • 如何在 TypeScript 中从界面中排除某个键

    在 TypeScript 中 您可以像这样组合两种接口类型 interface Foo var1 string interface Bar var2 string type Combined Foo Bar 我不想组合键 而是想将键从一个接
  • Mercurial qfold 所有补丁?

    结果发现没有hg qfold a I tried hg qfold hg qunapp and hg qunapp xargs hg qfold但无法让它发挥作用 有任何想法吗 通过您的 xargs 方法 您是否还记得 qfold 只能折叠
  • 计算多维数组中的重复值

    我需要计算多维数组中的相同值并删除重复项 我的阵列 r a b a b c d c d c d e f 需要输出 0 gt Array 0 gt a 1 gt b 1 gt 2 Result 1 gt Array 0 gt c 1 gt d
  • 为什么允许访问另一个对象的私有字段?

    最近 我观察到在 Java 中访问 priavte 字段的意外行为 考虑以下示例 该示例说明了该行为 public class A private int i lt private field public A int i this i i
  • 如何创建指向同一文件的 Doxygen 链接

    我想编写一条 Doxygen 注释来命名出现注释的文件 我希望 Doxygen 为我提供文件名 而不是显式地编写文件名 因此 如果我更改文件的名称 或将某些内容移动到不同的文件中 我不需要更改名称的硬编码实例 举一个具体的例子 假设我要向
  • 网页模板,其中内容占据视口的整个高度(如果有 1 行减去页脚)

    我正在寻找一个基于 CSS 的网页模板 其中主要内容div当其内容只有几行时 占据视口的整个高度 减去页眉和页脚高度 页脚应该位于视口的底部 而不是内容的正下方 它更多地位于视口的中间 内容区域需要垂直扩展才能与页脚顶部连接 如果内容需要比
  • Python:看不到抛出的异常

    我正在运行单元测试 我意识到抛出了异常 然而 我只是不确定到底抛出了什么 from pt hil utilities PT HIL Interface Utils widgets import PathPicker import unitt
  • 检测Webview滚动是否到达末尾

    我想弄清楚最大滚动的立场是WebView可以达到 我已经尝试过了webView pageDown true 但结果被延迟了 我无法向下滚动 然后在用户面前向上滚动 并且此方法并非每次都有效 我也尝试过webView getContentHe
  • Python3,通过点击按钮从url下载文件

    我需要从这样的链接下载文件https freemidi org getter 13560 https freemidi org getter 13560 但我不能使用urllib request or requests库 因为它下载 htm
  • 无法使用 Xcode 10 在 Mojave 上安装brew

    我无法在我的 Mac 上安装任何 BREW 软件包 并出现以下错误信息 安装在我的 Mac 上 macOS 10 14 测试版 18A293u Xcode 9 3 9E145 Xcode 10 0 测试版 10L176w Type in b
  • 扩展WPF工具包RichTextBox垂直显示文本

    我正在尝试通过其 Text 属性将丰富内容 RTF 格式 绑定到富文本框 扩展 WPF Toolkit 如下所示
  • NodeJS 需要('..')?

    我一直在查看一些 NodeJS 示例 遇到以下情况 var module require var module require 我明白 require 的作用 但不明白这样写时它的作用是什么 有人可以向我解释一下吗 这是定义在https n
  • Javascript:如何获取函数内的父键?

    我有一些函数 存储在集合 数组中 并且希望获取密钥 函数名称 而不重新输入它 有没有什么捷径可以访问它 var functions collection function x function var name function x nam
  • IO Monad 在什么意义上是纯粹的?

    我已经将 IO monad 描述为 State monad 其中状态是 现实世界 这种 IO 方法的支持者认为 这使得 IO 操作变得纯粹 就像引用透明一样 这是为什么 从我的角度来看 IO monad 内部的代码似乎有很多可观察到的副作用