MonadFix 用严格的语言

2024-03-10

我正在为 Ocaml 中类似 haskell 的 do 表示法开发 camlp4 扩展,并试图弄清楚 GHC 如何编译递归 do 绑定(使用 -XDoRec 启用)。
我想知道一元定点组合器是否可能以严格的语言存在(如 Ocaml/F#/SML/...)?
如果是的话,它会是什么样子?会不会很有用呢?


F# 计算表达式语法(与 Haskell 相关)do) 支持递归:

let rec ones = seq {
  yield 1
  yield! ones }

这是支持的,因为计算构建器必须支持Delay除了其他单子(或莫纳德加) 运营。代码被翻译成这样:

let rec ones = 
  seq.Combine
    ( seq.Yield(1),
      seq.Delay(fun () -> seq.YieldFrom(ones)) )

的类型Delay一般来说,(unit -> M<'T>) -> M<'T>诀窍在于它将带有效果(或立即递归引用)的计算包装到按需评估的延迟计算中。

如果您想了解有关 F# 中该机制如何工作的更多信息,那么以下两篇论文是相关的:

  • 语法问题:在 F# 中编写抽象计算 http://www.cl.cam.ac.uk/~tp322/drafts/notations.html
  • 初始化相互引用的抽象对象:值递归挑战 http://research.microsoft.com/apps/pubs/default.aspx?id=79951

第一个描述如何对 F# 计算表达式语法进行脱糖(以及如何Delay插入 - 一般来说,F# 如何将延迟计算和急切计算与效果结合起来),第二个描述 F# 如何处理let rec带有值的声明 - 就像ones值以上。

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

MonadFix 用严格的语言 的相关文章

  • 让 GHC 生成“带进位加法 (ADC)”指令

    下面的代码将表示 192 位数字的两个未装箱字三元组添加到新的未装箱字三元组中 并且还返回任何溢出 LANGUAGE MagicHash LANGUAGE UnboxedTuples import GHC Prim plusWord2 Wo
  • 如何在 Haskell 中获得列表的中间位置?

    我刚刚开始使用 Haskel 学习函数式编程 我正在慢慢度过Erik Meijer 在 Channel 9 的讲座 http channel9 msdn com shows Going Deep Lecture Series Erik Me
  • 函数式编程是否需要新的命名约定?

    我最近开始使用 Haskell 学习函数式编程 并在 Haskell 官方 wiki 上发现了这篇文章 如何阅读哈斯克尔 http www haskell org haskellwiki How to read Haskell What t
  • 我可以获得有关过度限制类型签名的警告吗?

    当我为可能更具多态性的函数提供类型签名时 GHC 或某些 lint 工具可以告诉我吗 GHC 不这样做 快速搜索 Hackage 也没有发现任何结果 实现这样的事情的一个简单但可能非常有效的方法是在 GHCi 中加载模块 使用 browse
  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • 管道序列中的异常处理

    我正在开发一个基本的 2D CAD 引擎 管道操作符显着改进了我的代码 基本上 有几个函数从空间中的点 x y 开始 并在多次移动操作后计算最终位置 let finalPosition startingPosition gt moveByL
  • f# 运行总计序列

    好吧 这看起来应该很容易 但我就是不明白 如果我有一个数字序列 如何生成由运行总计组成的新序列 例如 对于序列 1 2 3 4 我想将其映射到 1 3 6 10 以适当的功能方式 Use List scan https msdn micro
  • 类 GADT 类型变量的未来角色?

    A 昨天的问题 https stackoverflow com q 41135212 3072788有一个定义HList 来自HList https hackage haskell org package HList 0 4 1 0 doc
  • Haskell Cabal 包 - 找不到 Paths_ 模块

    我正在开发一个 Haskell 项目 Happstack 服务器 Blaze HTML 前端作为主要库 我想添加一个静态数据目录 看起来你可以使用 Cabal 使用自动生成的Path
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 当两个模式共享“when”子句时,模式匹配不完整

    A 共同的惊喜 https stackoverflow com q 18691622 2314532对于 F 初学者来说 以下事实是不完全匹配 let x y 5 10 match something with when x lt y gt
  • Haskell 中的实例声明

    我有这两个功能 primes sieve 2 where sieve p xs p sieve x x lt xs x mod p gt 0 isPrime number number 1 null x x lt takeWhile x g
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 将 Foq 与 F# 函数类型结合使用

    例如 我使用 F 类型定义来防止函数之间的硬依赖 type IType1 int gt int type IType2 int gt string let func1 i int int i i let func2 i int string
  • Haskell 下划线与显式变量

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

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 持久 selectList 导致错误“无法将类型‘BaseBackend backend0’与‘SqlBackend’匹配”

    我遇到以下编译错误 Couldn t match type BaseBackend backend0 with SqlBackend arising from a use of runSqlite The type variable bac
  • Haskell 中的 print 是纯函数吗?

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

随机推荐

  • 在 JavaScript 中获取平台特定的换行符?

    几年前 我为我的一个 Firefox 插件编写了以下函数 它可以帮助我获取特定于平台的换行符 GetNewLine function var platform navigator platform toLowerCase if platfo
  • x86 汇编中断服务程序可以调用另一个中断吗?

    我可以在独立 x686 环境中从中断服务程序中调用中断吗 那么可以执行以下操作 isr pusha call doSomething int 21h popa iret 如果可能的话 那么这些嵌套中断是否有任何重大的塌陷 虽然处理器对嵌套中
  • 选择 PySpark 中每行最大值的列名

    我有一个像这样的数据框 仅显示两列 但是原始数据框中有很多列 data ID1 3 5 ID2 4 12 ID3 8 3 df spark createDataFrame data ID colA colB df show ID colA
  • Javascript 扩展对象

    JavaScript 中的 Expando 对象是什么 我们需要这个的目的是什么 任何完整的例子将不胜感激 我在这里找到了 1 篇文章Javascript 网络开发的红发继子 http it toolbox com blogs think
  • 如何使用 ruby​​ 中的外部文件中的代码执行本地函数?

    require 可以执行本地定义的函数吗 我想描述我需要的最简单的方法就是展示一个例子 我使用的是 ruby 1 9 3 但也欢迎 1 8 和 2 0 的解决方案 我有一个文件 main rb 如下 class Stuff def self
  • 我如何区分我的键/值对列表

    如果我有一个清单List
  • 与字符串参数统一使用 JNI AndroidJNI.GetMethodID

    我正在使用 android java 插件进行统一工作 我试图从统一的 java 中调用函数 并且它工作成功 cls Activity AndroidJNI FindClass com unity3d player UnityPlayer
  • 无法连接远程调试器

    我正在使用 React JS 当我使用时react native run android 我的设备已插入 我看到一个空白页 当我摇动设备并选择Debug JS Remotely从选项列表中我看到以下屏幕 FYI OS Ubuntu 16 0
  • vim中如何全选并复制?

    如何在vim插入模式下全选并复制 还有另一种方法可以在正常模式下做到这一点吗 我尝试过视觉模式和 gg 和 shift gg 选择全部然后猛拉 但这不会将其传输到剪贴板以便能够将其粘贴到其他应用程序 如 Skype 或 chrome 浏览器
  • 如何将额外的自定义 ./configure autotools 选项传递给 Buildroot 包?

    例如 我想添加选项 enable foo enable bar to a configure命令 Many configure选项可以通过间接设置BR2 配置 但许多软件有如此多的选项 以至于不可能只有一个BR2 为每一个可能的配置 con
  • Blazor 服务器应用程序组件突然抛出空引用异常

    今天 当我在 Visual Studio 2022 中以调试模式启动 Blazor 服务器应用程序时 我几周来每天开发的 Blazor 服务器应用程序突然开始在 Host cshtml 中引发异常 错误如附图所示 Host cshtml 的
  • 如何从一堆变量中选择最小值?

    假设我有变量 a b c and d全部都有数字 我想获得最小 最大 值 我的典型 XSLT 1 0 方法是
  • 在浏览器关闭选项卡或浏览器退出时运行方法

    是否有一个可以在 Javascript Angular JQuery 中使用的操作处理程序 可以安排在 Web 浏览器中关闭选项卡之前执行的方法 关闭我的意思是退出浏览器或关闭选项卡或崩溃或其他什么 是的 你只需绑定beforeunload
  • 如何在java中从周数、年份和星期几获取日期?

    我有周数 相应的年份和周数 即 1 表示星期一 2 表示星期二 依此类推 有没有办法在java中找到带有这些信息的日期 以下是我在网上找到的一个方法 int week 51 LocalDate wkstart LocalDate now w
  • 如何避免 VBA 中的默认属性陷阱?

    我只是偶尔使用 VBA 每次我回到 VBA 时 我都会遇到以下一些变化 我有一个Range目的 currentCell 我用它来跟踪我在电子表格中使用的单元格 当我更新它以指向不同的单元格时 我写道 currentCell currentC
  • Django - 网站主页

    我一直在研究 Django 从我所看到的来看 它真是太棒了 然而 我有点困惑 如何为我的网站实现 主页 它是一个单独的应用程序 还是只是项目中的一个视图 还是什么 对此没有真正的规则 但我喜欢做的一件事实际上是安排索引访问重定向到另一个位置
  • html 元素上的 title 属性有什么用?

    html 元素上的 title 属性有什么用 div class myDiv title This is the title Stuff div 它的目的是用作工具提示吗 它还有什么进一步的用处吗 差不多了 HTML 规范称之为咨询文本 h
  • 如何在Cron上动态设置变量?

    我正在尝试将 cron 文件放置在 etc croon 中 d 我的问题是我不想保持此文件更新 所以我正在寻找一种从文件动态获取软件版本的方法 我几乎没有其他变量 但现在我认为问题在于 cat software VERSION 它在 she
  • 在 jQuery 中取消延迟的 Promise

    如何在不从 DOM 中删除元素的情况下取消 Promise fiddle http jsfiddle net ripper234 LG9eZ 4 我运行了这段代码 box delay 2000 show slow delay 2000 pr
  • MonadFix 用严格的语言

    我正在为 Ocaml 中类似 haskell 的 do 表示法开发 camlp4 扩展 并试图弄清楚 GHC 如何编译递归 do 绑定 使用 XDoRec 启用 我想知道一元定点组合器是否可能以严格的语言存在 如 Ocaml F SML 如