在 Haskell 中创建独特的标签

2023-12-30

我正在用 Haskell 编写一个简单的命令式语言的编译器,输出 Java 字节码。我已经到了发出字节码的抽象表示的地步。

在编写编译 if 语句的代码时,我遇到了一些麻烦。为了实现 if 语句,我需要跳转到的标签。因此,我需要为该标签生成一个名称,并且该名称必须是唯一的。

我的第一个想法是通过一些状态compileStatement, i.e

compileStatement :: Statement -> UniqueIDState -> [AbstractInstruction]

当然,compilerStatement是递归的,因此使用此方法需要我从递归调用中传递唯一 ID 生成器的状态:

compileStatement :: Statement -> UniqueIDState -> (UniqueIdState, [AbstractInstruction])

这看起来有点笨拙,特别是当我意识到我将来需要携带更多状态时;有更优雅的方式吗?


你需要一个“独特的供应”。在 Haskell 中执行此操作的常用方法是通过 State monad 线程化计数器,这会自动解决您所描述的管道问题。

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

在 Haskell 中创建独特的标签 的相关文章

  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • Haskell:如何创建将函数应用于元组项的最通用函数

    这是一个个人练习 旨在更好地理解 Haskell 类型系统的局限性 我想创建最通用的函数 将某些函数应用于 2 条目元组中的每个条目 例如 applyToTuple fn a b fn a fn b 我试图让这个函数在以下每种情况下都起作用
  • 什么是应用程序二进制接口 (ABI)?

    我从来没有清楚地理解什么是 ABI 请不要向我指出维基百科文章 如果我能理解的话 我就不会在这里发这么长的帖子了 这是我对不同接口的看法 电视遥控器是用户和电视之间的接口 它是一个现有的实体 但本身没有用 不提供任何功能 遥控器上每个按钮的
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • 如何将可选标志解析为 Maybe 值?

    我正在尝试使用optparse 应用程序 https hackage haskell org package optparse applicative 0 11 0 2解析一个Maybe String但我找不到任何地方如何处理Maybe 我
  • 不同 hs 文件中的函数分离时堆栈空间溢出

    我有一个巨大的 haskell 文件 它编译和运行没有任何问题 我想将一些函数和类型定义放在通用 hs 文件中的单独模块中 然后将其导入我的主模块中 虽然主程序编译时没有任何错误 它还编译导入的模块 但当我尝试运行它时 出现堆栈空间溢出 I
  • Haskell printf 转字符串

    Haskell 中有等效的 sprintf 吗 我需要将双精度值转换并格式化为字符串 有没有其他方法而不使用printf什么样的功能 主要问题是要避免 Prelude gt putStrLn myDoubleVal 1 7944444444
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 如何在 TH 拼接中复制 'name 的行为

    考虑这个 Haskell 文件 LANGUAGE TemplateHaskell OPTIONS GHC fplugin Test Inspection Plugin module Text main where import Test I
  • 是否有一个基于对象身份的、线程安全的记忆库?

    我知道记忆化似乎是堆栈溢出的 haskell 标签上的一个长期话题 但我think以前没有人问过这个问题 我知道 Haskell 有几个不同的 现成 记忆库 memo combinators 和 memotrie 包 利用涉及惰性无限数据结
  • 如何为 iPhone 构建静态库?

    我想我已经到处寻找问题的答案 但没有运气 我正在尝试创建一个简单的静态库来在 iPhone 设备上运行 但我总是以 XCode 结束 说 文件不属于必需的架构 并且我已经尝试了我发现的每个构建标志 但没有任何运气 我已经让它在模拟器上工作了
  • 我应该使用镜头中的什么来按索引构建只读吸气剂?

    我有一个内部细节被隐藏的类型 我想提供某种镜头 可以在特定索引处读取所述类型的元素 但是not修改它们 一个Ixed我的类型的实例似乎没有做我想要的事情 因为它明确允许修改 尽管不允许插入或删除 如果我想允许只读索引 我不确定我使用什么 如
  • 有没有办法在 OSX 中安装 gcc 而无需安装 Xcode?

    我用谷歌搜索了一下 似乎没有办法在 OS X 上安装 gcc 而不安装 Xcode 至少需要 1 5GB 的空间 我需要的只是 gcc 而不是 Xcode 附带的其他垃圾 此时 我将采用任何其他类型的 C 编译器 我知道我可以简单地安装 X
  • Haskell 错误处理方法

    毫无疑问 Haskell 中有多种机制来处理错误并正确处理它们 错误单子 要么 也许 异常等 那么为什么用其他语言编写容易出现异常的代码比用 Haskell 感觉更简单呢 假设我想编写一个命令行工具来处理命令行上传递的文件 我想 验证提供的
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • 在 Haskell 命令行应用程序中提示输入密码

    以下 Haskell 程序提示用户在终端中输入密码 如果输入正确则继续 main do putStrLn Password password lt getLine case hash password member database of
  • 为什么 exceptT 没有 MonadMask 实例?

    爱德华 克梅特例外情况图书馆不提供单子掩码 https www stackage org haddock lts 7 18 exceptions 0 8 3 Control Monad Catch html t MonadMask实例为Ex
  • CompileAssemblyFromDom 抛出访问被拒绝异常

    代码 using var codeProvider new CSharpCodeProvider var compilerParameter new CompilerParameters assemblies assemblyName fa
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 我们可以在Java中调用带有空对象的静态方法吗?如果是这样,怎么办?

    既然静态方法可以直接从类中调用 即ClassName methodName 为什么需要用类的对象来调用静态方法呢 如果有人知道的话 请举例说明 public static void methodA 以下代码包含一个示例 其中通过null参考
  • 为什么我的通用 StatefulWidget 类在运行时会出现 TypeError?

    我有一个通用的StatefulWidget类有一个Function打回来 当我尝试调用该回调时 我得到一个运行时TypeError EXCEPTION CAUGHT BY WIDGETS LIBRARY The following Type
  • Tomcat 中的共享 JNI 库 (.so) - UnsatisfiedLinkError

    我有一个在 Tomcat7 中部署的两个 Web 应用程序之间共享的 JNI 库 so 我在正在部署的第一个 Web 应用程序中仅使用 System loadLibrary 加载一次库 然后在第二个应用程序中检查它是否已加载以不再加载 我尝
  • 活动与片段生命周期[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发我正在使用的新应用程序Activity and Fragment 他们之间有什么主要区别吗 Update 我在 Androi
  • 我可以使用 asyncio 读取和写入 multiprocessing.Pipe 吗?

    我需要在 Python 中的进程之间进行通信并且正在使用asyncio在每个进程中进行并发网络IO 目前我正在使用multiprocessing Pipe to send and recv进程之间存在大量数据 但是我在外部这样做asynci
  • CRC32 校验和是如何计算的?

    也许我只是没有看到它 但 CRC32 似乎要么不必要地复杂 要么在我可以在网络上找到的任何地方都没有得到充分的解释 我知道它是消息值的基于非进位的算术除法除以 生成器 多项式的余数 但它的实际实现让我无法理解 我读了CRC 错误检测算法的轻
  • 所有不同 Intl.NumberFormats 的完整列表

    我正在寻找所有不同 Intl NumberFormats 的完整列表 The 国际数字格式 https developer mozilla org en US docs Web JavaScript Reference Global Obj
  • 如何在静态方法中调用类的成员变量?

    我正在使用某种方法来自动加载带有函数的帮助程序文件 我现在遇到的唯一问题是如何调用该类中的变量 因为我没有将其实例化为对象 this行不通的 但会怎样呢 class some helperclass var some variable 00
  • 如何处理 Laravel 5 中的异常和错误消息?

    当我收到此错误时 Connection php 第 620 行中的 QueryException SQLSTATE 23000 完整性 违反约束 1062 重复条目 我可以用我自己的闪存错误消息来处理它 而不是 哎呀 看起来像出事了 您有两
  • 在ansible中创建一个带有循环的docker-compose

    我需要基于 yml 文件构建一个 docker compose 在下一个 yml 中 它将是每个服务的名称 图像和版本 services service front image acalls caselog web app version
  • 如何在Android应用程序中创建游标数据而不从数据库获取数据?

    在我的 Android 应用程序中 我使用 Sqlite DataBase 来存储来自服务器的数据 我使用 ContentProvider 和 ContentResolver 访问 DataBase 中的数据 并使用 CursorAdapt
  • 空手道 - 如何处理 unicode 字符?

    我想发送一个 Unicode 字符串作为请求参数 如下所示 mobile 但空手道会这样发送 移动的 我尝试从包含我的文本的文件中读取 Unicode 文本 然后阅读并以这种方式发送 def persianMobile1 read clas
  • JPEG 的无损裁剪(剪切和粘贴)

    我正在寻找无损 jpeg 操作的示例 博客文章 等 裁剪 n drop 剪切和粘贴 我知道有一个程序jpegtran http jpegclub org jpegtran 它可以执行无损裁剪 在某些情况下 但似乎缺乏良好的文档 是的 我已经
  • javascript new Date(0) 类显示 16 小时?

    interval new Date 0 return interval getHours 上面返回 16 我希望它返回 0 有任何指针吗 getMinutes 和 getSeconds 按预期返回零 谢谢 我正在尝试制作一个计时器 func
  • iPhone 中 POST 方法的多个参数

    我正在尝试使用 POST 将多个参数发送到特定的 url 但它没有正确发送参数 NSDate now NSDate date NSDateFormatter formatter NSDateFormatter alloc init form
  • 使用objective-c/核心图形的水平居中文本

    我正在尝试使用 Core Graphics 在 iPhone 屏幕上居中显示文本 我发现这段代码 https stackoverflow com questions 48034940 draw centered text using cor
  • iOS AVFoundation 视频捕获方向选项

    我有一个应用程序 我只想为前置摄像头进行视频捕获 那没问题 但我希望视频捕捉始终是横向的 即使手机处于纵向状态也是如此 我有一个基于 Apple 发布的 AVCamDemo 代码的工作实现 并借用了中的信息本技术说明 http develo
  • ViewPager 用 2 根手指滑动

    我想用两根手指实现 ViewPager 滑动 我尝试实现 ViewPager 的子类 重写 onTouchEvent 并仅当触摸是由 2 个手指进行时才将该方法传递给超类 但有一个问题 滑动动画也适用于 1 根手指 我想我必须重写其他方法
  • 使用 g++ 编译 FLTK

    我正在使用 C 学习 Stroustrup 的原则和实践 我正在尝试编译以下程序 include
  • 在 Haskell 中创建独特的标签

    我正在用 Haskell 编写一个简单的命令式语言的编译器 输出 Java 字节码 我已经到了发出字节码的抽象表示的地步 在编写编译 if 语句的代码时 我遇到了一些麻烦 为了实现 if 语句 我需要跳转到的标签 因此 我需要为该标签生成一