仅使用一元绑定语法表达 do 块

2023-12-30

据我所知,doHaskell 中的块只是一元绑定运算符的某种语法糖。例如,可以转换

main = do f <- readFile "foo.txt"
          print f
          print "Finished"

to

main = readFile "foo.txt" >>= print >> print "Finished"

Can all do块转换为绑定语法?例如,这个块怎么样?f多次使用:

main = do f <- readFile "foo.txt"
          print $ "prefix " ++ f
          print $ f ++ " postfix"

假设我们在 IO monad 中,不可能简单地执行readFile计算两次。这个示例(如果可能的话)如何仅使用绑定语法来表达?

我认为使用Control.Monad没有解决方案,因为它内部使用do blocks.

我认为可以使用箭头来表达这一点(使用&&&) -- 也许这是一种只能使用箭头的情况单子的概括?

请注意,这个问题不是关于上面的特殊示例,而是关于在单元表达式中多次使用计算结果的一般情况,例如print.


是的,都可以转换为bind语法;事实上,它们是由编译器内部转换的。

我希望您的示例的翻译能给您带来提示:

main = readFile "foo.txt" >>= \f ->
       (print $ "prefix " ++ f) >>
       (print $ f ++ " postfix")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用一元绑定语法表达 do 块 的相关文章

  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • Haskell:无法预期类型“Integer”与实际类型“Int”

    我已经盯着这段代码有一段时间了 但我无法理解该错误消息 divisors Integer gt Integer divisors n t t lt 1 n mod n t 0 length a gt Integer length 0 len
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • 用作 ServiceStack 的 IoC 时在 autofac 中配置生命周期范围

    我目前正在使用 AutoFac 作为我们的 ServiceStack Web 服务应用程序的 DI 容器 我能够配置接线和所有内容 但在阅读了有关范围的部分后 我不知道在注册我的组件时最好使用哪个范围 在我们的特定情况下 我认为 PerHt
  • 如何在 CF10 中确定闭包变量的范围?

    引自Adobe ColdFusion 10 使用闭包文档 http help adobe com en US ColdFusion 10 0 Developing WSe61e35da8d31851842acbba1353e848b35 8
  • 标准的能力

    我发现了一些使用标准的旧例子here http www serpentine com blog 2009 09 29 criterion a new benchmarking library for haskell 看起来好像早在 2009
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • C++ 概念与 Haskell 类型类有何不同?

    Concepts TS 中的 C 概念最近已合并到 GCC 主干中 概念允许人们通过要求类型满足概念的条件 例如 可比较 来约束通用代码 Haskell 有类型类 我对 Haskell 不太熟悉 概念和类型类如何相关 概念 由概念 TS 定
  • 将整个包传递给雪簇

    我正在尝试并行化 使用snow parLapply 一些依赖于包 即除snow 调用函数中引用的对象parLapply必须使用显式传递给集群clusterExport 有没有办法将整个包传递到集群 而不必显式命名每个函数 包括用户函数调用的
  • 编译成 C/C++ 源代码的编程语言? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在haskell中用另一个字符串替换一个字符串

    我想用不同的字符串替换输入文件中的字符串 我正在寻找一种方法 但似乎我只能逐个字符地更改字符串 例如在我下面的代码中 replace String gt String replace replace x xs if x then y rep
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored

随机推荐

  • 设置 Doctrine2 实体属性而不检索整个关联对象

    我有一个表对象 它有 2 个外键字段 user id 和 Teacher id 为 X 表生成实体后 该实体仅包含 user 和 teacher 属性 这迫使我使用关联的对象而不是 id 因此 假设我知道我的对象的 user id 和 Te
  • 使用网页作为 C# 桌面应用程序中的 UI?

    我正在构建一个带有简单 UI 的 C 桌面应用程序 由于我熟悉 HTML CSS 并且之前有一个非常相似的应用程序基于 Web 的迭代 因此如果我可以重新使用一些现有的 HTML CSS 页面作为这个新桌面应用程序的 UI 那将是理想的选择
  • 纯函数的好处

    今天我正在阅读有关纯函数的内容 对其用法感到困惑 如果一个函数为同一组输入返回同一组值并且没有任何可观察到的副作用 则该函数被称为纯函数 e g strlen 是一个纯函数 而rand 是一种不纯的 attribute pure int f
  • 为什么 TypeError: axios.create 不是一个函数?测试 axios GET 时

    我正在尝试在 React 中测试我的 axios API 函数 在这里发现这个问题 我如何开玩笑地测试 axios https stackoverflow com questions 45016033 how do i test axios
  • Web Worker 文件被缓存并且不会在 IE 11 中重新加载

    我正在运行一个可以在 Chrome 和 Firefox 中运行的简单 HTML5 应用程序 它使用网络工作者 如下所示 var worker new Worker the worker URL Code js 我在IE中实验了一个多小时 终
  • JNLP 文件无法从 Windows 10 上的 IE11 启动

    自 5 月 9 日起 Windows 10 更新后 在 IE11 11 0 40 上 JNLP 文件无法从 IE 启动 但在 IE 版本 11 0 34 的计算机上它可以完美运行 有任何想法吗 提前致谢 我在打开 jnlp 文件时遇到问题
  • 为什么 Redis 密钥不会过期?

    I have checked these questions but they did not help me to fix my issue I am using Redis as a key value store for Rate L
  • jQuery - 当滑动面板显示时绝对定位 div 的“左”位置动画

    我在屏幕左侧有一个隐藏面板 单击位于屏幕左侧的 选项卡 即可滑入视图 我需要面板滑过现有页面内容的顶部 并且需要选项卡随之移动 所以两者在css中都是绝对定位的 一切工作正常 除了我需要选项卡 以及选项卡容器 在面板显示时向左移动 因此它似
  • 从 azure web 应用程序发送 http 请求到我的机器

    我创建了一个发送 http 请求的 azure Web 应用程序 axios post http mypublicip 3000 write Name content data 1 同时我的电脑有一个正在运行的 Express 服务器 ap
  • 如何在 ASP.NET MVC 中生成完整的trace.axd?

    在我的应用程序上 启用后ASP NET 跟踪 http msdn microsoft com en us library y13fw6we VS 71 aspx在 ASP NET MVC 应用程序中 时间计算统计数据相差 5000 倍 我的
  • AF网络和网络错误

    我正在使用AFNetworking框架来发出多个 JSON Web 请求 在开发过程中 如果我未能提供所需的参数或服务开发人员损坏了某些东西 我会收到500 error 的错误块AFJSONRequestOperation正确地抓住了它 但
  • 在 Life ray 中自定义站点管理员角色的权限?

    我想自定义站点管理员角色权限 即我需要启用一项功能来创建用户以在相应站点下进行站点管理 我怎样才能做到这一点 我需要用 Hook 来实现它还是需要创建 EXT 或者任何其他更简单的方法来实现这一目标 我需要在相应站点下启用用户创建并为站点管
  • 著名:滚动视图中的滚动视图

    我正在尝试创建一个类似于 BBC 新闻本机应用程序的布局 使用known js 一个垂直的ScrollView 其中有许多水平的ScrollView 我已经 工作 到了一切都渲染并且水平滚动条完美工作的程度 我的问题是 如果用户在水平 Sc
  • 重命名文件扩展名而不指定

    我正在创建一个 bash shell 脚本 它将重命名文件扩展名 而无需指定旧的文件扩展名 如果我在 Linux 的终端中输入 change foo 它会将所有文件扩展名更改为 foo 假设我有四个文件 file1 txt file2 tx
  • 使用 Object.assign 更新嵌套对象

    我有以下对象 当用户单击按钮时 该对象将被分配一个新值 state title id imageId boarding id test work title id 我更新的对象如下所示 state title My img id 1234
  • 服务意图必须明确:意图

    我现在有一个应用程序 我在其中通过广播接收器 MyStartupIntentReceiver 调用服务 广播接收器中调用服务的代码是 public void onReceive Context context Intent intent I
  • 从 Razor 调用 ServiceStack 服务

    这里有一点边缘情况 我需要从 razor 同一网站 调用服务堆栈服务 现在我正在做 CheckIfConfiguredResponse aResponse new JsonServiceClient http localhost 2000
  • 在使用 AngularJS 的 Chrome 应用程序中,我可以直接将 ngSrc 指令用于内部图像吗?

    我正在使用 AngularJS 编写一个 Chrome 应用程序 我知道 当访问外部图像时 您必须执行跨源 XMLHttpRequest 并将它们作为 blob 提供 我有一堆内部图像 本地应用程序资源 它们遵循我想要在 ngRepeat
  • 选择容器后 JProfiler 远程进程列表为空

    我正在使用 JProfiler 12 并尝试通过 SSH 连接到 Docker 容器中的远程 JVM 进程 我已按照此处的说明进行操作 https www ej technologies com products jprofiler wha
  • 仅使用一元绑定语法表达 do 块

    据我所知 doHaskell 中的块只是一元绑定运算符的某种语法糖 例如 可以转换 main do f lt readFile foo txt print f print Finished to main readFile foo txt