Haskell do 符号绑定

2023-11-23

我正在尝试对 Haskell 中的 do 语句进行脱糖处理。我在这里找到了一些例子,但无法将它们应用到我的案例中。 我唯一能想到的是一个沉重的嵌套 let 语句,这看起来很丑陋。

其中 do 表示法应替换为 bind 的语句:

do num <- numberNode x
   nt1 <- numberTree t1
   nt2 <- numberTree t2
   return (Node num nt1 nt2)

任何意见都将受到高度赞赏 =)


numberNode x >>= \num ->
  numberTree t1 >>= \nt1 ->
    numberTree t2 >>= \nt2 ->
      return (Node num nt1 nt2)

请注意,如果您使用 Applicatives,这会更简单:

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

Haskell do 符号绑定 的相关文章

  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 在 Haskell 中计算移动平均线

    我正在学习 Haskell 所以我尝试实现移动平均函数 这是我的代码 mAverage Int gt Int gt Float mAverage x a fromIntegral k fromIntegral x k lt rawAvera
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • 以下两个 lambda 函数的空间复杂度

    我正在阅读以下内容 https en wikibooks org wiki Haskell Graph reduction https en wikibooks org wiki Haskell Graph reduction 其内容如下
  • Haskell 泛化问题(涉及列表理解)

    假设我想知道a上的所有要点 x y 矩形内的平面has 我可以使用列表推导式来计算 如下所示 let myFun2D x y x lt 0 2 y lt 0 2 现在 如果我想为一个人完成同样的事情 x y z 空间 我可以采取同样的方式并
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 不同编程语言中的浮点数学

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

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • ST monad 是如何工作的?

    我知道 ST monad 有点像 IO 的弟弟 而 IO 又是添加了状态 monadRealWorld魔法 我可以想象状态 也可以想象 RealWorld 以某种方式放入 IO 中 但每次我写一个类型签名ST the sST monad 的
  • C++ 概念与 Haskell 类型类有何不同?

    Concepts TS 中的 C 概念最近已合并到 GCC 主干中 概念允许人们通过要求类型满足概念的条件 例如 可比较 来约束通用代码 Haskell 有类型类 我对 Haskell 不太熟悉 概念和类型类如何相关 概念 由概念 TS 定
  • 关于“没有绑定的类型签名”的错误

    我在 Haskell 中遇到 ASCII 问题 fromEnum Char gt Int toEnum Int gt Char offset Int offset fromEnum A fromEnum a toUpper Char gt
  • 如何在haskell中用另一个字符串替换一个字符串

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

随机推荐

  • 使用 JAXB 从 JSON 解组嵌套对象

    我正在尝试使用 Eclipselink 将输入 JSON 解组到 JAXB 对象中 然而 当我尝试这样做时 我发现嵌套对象最终被设置为空 我可以尝试自行解组嵌套对象 并且它将一直工作 直到它必须解组进一步的嵌套对象 然后该对象也设置为 nu
  • 当 UDP 标头校验和不正确时,UDP 数据包是否会被丢弃?

    如果我打开一个原始套接字 并发送带有错误校验和的 udp 数据包 这些数据包是否会被 tcp ip 堆栈丢弃到另一侧 是的 它们会被丢弃 如果您需要更可靠的通信 那么使用 TCP 会更好 欲了解更多信息 请看一下 http www diff
  • handler.postDelayed 在 IntentService 的 onHandleIntent 方法中不起作用

    final Handler handler new Handler LOG d delay handler postDelayed new Runnable Override public void run LOG d notify cal
  • 何时为不再拥有的资源回收存储?

    下面程序的第 2 行分配了一个向量资源 当程序结束时 向量资源不被拥有 如果资源根本不被拥有 那么什么时候会回收它 是否有使用 Rust 所有权语义和生命周期术语的解释可以让程序员相信该资源确实被回收了 fn main let mut v
  • psql中,为什么有些命令没有效果?

    有时我的命令在psql似乎没有效果 知道为什么吗 以下是数据库中所有表的列表library development library development gt d List of relations Schema Name Type Ow
  • 从 jar 文件复制目录

    我最近开发了一个应用程序并创建了 jar 文件 我的一个类创建一个输出目录 用其资源中的文件填充它 我的代码是这样的 Copy files from dir template in this class resource to output
  • 避免 Seaborn 条形图颜色去饱和

    我正在尝试使用几个不同的库 bokeh seaborn and matlotlib 但保持相同的配色方案 我从散景中选择了分类调色板 from bokeh palettes import Category10 as palette然后也用在
  • 什么是 Rails 插件或 Ruby gem,可以自动修复英语语法?

    Facebook 刚刚重新推出了 Comments 具有自动语法修复功能 语法过滤器有什么作用 添加标点符号 例如句子末尾的句号 修剪多余的空格 自动区分单词 例如 将 a 的第一个单词大写 句子 扩展俚语 例如 plz 变为 please
  • 如何实现带锁选择的select2?

    我正在尝试将 select2 与一个禁用值一起使用 我正在尝试像这样实现它 select currency select2 data preloaded data 我一直在读关于锁定选择但我无法实现它 请问有人可以让我知道如何实现它或者有关
  • 元标记中的 html 实体会影响索引吗?

    我想知道在元标记 如关键字和描述 中使用 HTML 实体是否是最好的方法 它会影响搜索引擎的索引吗 只要我的字符集允许字符 我就会放置没有实体的元标记内容 我研究了一下 发现了这个Google 网站管理员 网站所有者帮助该示例包含 9 24
  • 在 Hangfire 中保留执行超过 1 天的作业的历史记录

    我刚刚开始使用 Hangfire 我很喜欢它 据我了解 Hangfire 会将成功作业的历史记录保留 1 天 然后将其清除 有没有办法可以自定义此默认行为并将历史记录保留任意持续时间 例如 7 天 为此 您需要创建一个作业过滤器并通过han
  • postgres 无法识别函数中的临时表

    这可能是因为我累了 或者我是 postgres 新手 然而 我试图在函数中使用临时表 而 postgres 抱怨 关系不存在 然而 如果我获取函数的主体并执行它 它就可以正常工作 下面是我尝试创建的函数类型的示例 请记住 我已经删除了所有有
  • 我正在使用 Python urllib2 下载文件。如何查看文件大小有多大?

    如果它很大 那么停止下载 我不想下载大于 12MB 的文件 request urllib2 Request ep url request add header User Agent random choice agents thefile
  • R中按行号分割数据帧

    这可能非常简单 但我找不到解决方案 df lt data frame replicate 10 sample 0 1 10 rep TRUE v lt c 3 7 有没有一种优雅的方法可以在 v 中指定的行号处将此数据帧拆分为 列表的 三个
  • 将大小为编译时常量的数组初始化为单个值

    我有一个 c 风格的数组 其大小由 a 定义 define并且可以根据编译选项进行更改 例如 if LINUX define SIZE 4 else define SIZE 5 endif static int myArr SIZE 如何将
  • Reader和InputStream有什么区别?

    Reader和InputStream有什么区别 以及何时使用什么 如果我可以使用 Reader 来读取字符 为什么我会使用 inputstream 我想读取对象 InputStream 是从资源获取信息的原始方法 它逐字节抓取数据 而不执行
  • 指针初始化为什么?

    有件事总是让我困惑 那就是字符指针 四年后 我再次徘徊在 c 语言上 以上述案例为例 为什么char指针的行为是这样的 当指针指向任何内容时 我们如何直接寻址指针的内容 或者就像 char 指针存储地址以外的东西一样 include
  • 编写 Iron Python 调试器

    作为学习练习 我正在使用 IronPython 为自己编写一个简单的扩展 插件 宏框架 我已经掌握了基础知识 但我想添加一些基本的调试支持 以使我的脚本编辑器更易于使用 我在互联网上搜索了一下 发现了一些关于编写托管调试器的好资源 包括 M
  • 在 C 中用零覆盖整个文件的最快方法是什么?

    我需要做的是以最快的方式将整个文件内容用零填充 我知道一些Linux命令 比如cp实际上得到一次写入的最佳块大小信息是多少 但我无法弄清楚使用此块大小信息是否足以获得良好的性能并且看起来像st blksize来自stat 没有给我那个块大小
  • Haskell do 符号绑定

    我正在尝试对 Haskell 中的 do 语句进行脱糖处理 我在这里找到了一些例子 但无法将它们应用到我的案例中 我唯一能想到的是一个沉重的嵌套 let 语句 这看起来很丑陋 其中 do 表示法应替换为 bind 的语句 do num lt