Haskell 相当于 C 的 __LINE__

2024-01-02

有没有办法在 Haskell 中获取行号/回溯信息?

(就像C的__LINE__宏或Python的traceback.extract_stack())

这对我编写生成 C++ 代码的 Haskell 程序很有用,该程序将用注释来表示,告诉哪个 Haskell 行负责哪个 C++ 行。

哈斯克尔示例:

LINE "#include <foo.h>" -- this is line 12
: INDENT "void Foo::bar() {" "}"
    [ LINE $ "blah(m_" ++ x ++ ", \"" ++ x ++ "\");"
    | x <- ["Potato", "Avocado"]
    ]

将生成以下 C++ 代码:

#include <foo.h>                  // gen.hs:12
void Foo::bar() {                 // gen.hs:13
  blah(m_Potato, "Potato");       // gen.hs:14
  blah(m_Avocado, "Avocado");     // gen.hs:14
}                                 // gen.hs:13

其实你可以使用CPP__LINE__Haskell 中的 pragma。

{-# LANGUAGE CPP #-}

main = do
    print "one"
    print __LINE__


$ runhaskell A.hs
"one"
5

另外,Control.Exception.assert如果条件失败,函数将发出行号。

import Control.Exception

main = do
    print "one"
    assert False $
        print "two"


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

Haskell 相当于 C 的 __LINE__ 的相关文章

随机推荐

  • 文件...无法打开流:权限被拒绝

    我正在为客户处理一个网站 我已经在我的服务器上克隆了整个网站 并且它似乎可以工作 现在我已将该网站复制到他的服务器并尝试付款 使用 paypal pro 但出现权限错误 Warning error log PayPal log functi
  • Jqgrid custom_func 验证并获取所有行编辑值

    正如它在另一个问题中评论的那样 jqgrid editoptions custom func 与 required false https stackoverflow com questions 41650053 jqgrid editop
  • ASP.NET MVC 404 错误处理 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 ASP NET MVC 中正确处理 404 https stackoverflow com questions 619895 how can i properly handle 404 in
  • 如何在 JavaScript 中按日期对数组进行排序? [复制]

    这个问题在这里已经有答案了 我在按日期对数组对象中的数组进行排序时遇到问题 我有一个数组对象 如下所示 name February plantingDate 2018 02 04T17 00 00 000Z name March plant
  • Blazor WebAssembly Server 项目如何引用客户端索引?

    使用模板 启用 ASP NET Core 托管的 Blazor WebAssembly 应用程序 它创建项目 BlazorApp1 Client BlazorApp1 服务器 我可以看到服务器有一个对客户端的项目引用 但我无法确定哪些代码允
  • 为什么要进入结束程序多个EOF?

    试图理解我的代码的行为 我期望 Ctrl D 导致程序打印数组并退出 但是它需要按 3 次 并且在第二次按后进入 while 循环 include
  • 在数据库中存储可变行/列 CSV 文件

    我有一个由应用程序创建的大量 CSV 数据集合 我希望将其存储在数据库 最好是 SQL Server 中 该数据可以具有任意数量的列和任意数量的行 并且将每个数据存储为单独的表没有多大意义 能够搜索这些数据也很棒 将这些数据放入数据库的最佳
  • DocumentCompleted 的 WPF 等价物是什么?

    我检查了 这个问题还没有被问到 WebBrowser 类的 DocumentCompleted 在 WPF 中等效项是什么 DocumentCompleted 方法在 WPF 中不存在 至少在最新版本的 NET 和 Visual Studi
  • 如何以编程方式在 iPhone 上启用引导访问(Kiosk 模式)?

    Question 我如何自动化引导访问 https stackoverflow com q 13254309 328397iPhone 上的模式 我需要自动启用和删除此功能 背景 这份来自爱荷华州的申请 http techcrunch co
  • 链接到 Google Drive 上的 kml/kmz 文件

    我已将 kml 和 kmz 文件保存在旧 Google 协作平台的文件柜中 我复制这些文件的永久链接并将其粘贴到 Google 地图上的搜索框中以覆盖地标 我已将测试 kml 文件保存在新 Google 云端硬盘的文件夹中 但我不知道如何获
  • Maven 错误“传输失败...”

    我正在尝试使用 Maven m2eclipse 设置一个项目 但在 Eclipse 中收到此错误 描述 资源路径 位置类型 无法计算构建计划 无法从以下位置传输 org apache maven plugins maven compiler
  • 使用 SimpleXMLElement 的大型 PHP for 循环非常慢:内存问题?

    我目前有一些 PHP 代码 基本上从 xml 文件中提取数据并使用创建简单的 xml 对象 products new SimpleXMLElement xmlString 然后 我使用 for 循环遍历此代码 在其中设置 XML 文档中每个
  • 尝试删除 Apple 隔离区会出现错误“xattr:[Errno 2] 没有此类文件或目录”

    我正在尝试从 osx 上的文件权限中删除隔离 类似的起点this https superuser com questions 526920 how to remove quarantine from file permissions in
  • 使父级 div webkit-filter 不影响子级

    我正在使用一个非常奇特的 webkit 过滤器来使背景图像变成灰度 并将鼠标悬停在图像上变成彩色 这是过滤器 filter none webkit filter grayscale 0 transition opacity 3s ease
  • 由于 ɵɵFactoryTarget 未定义,在 Angular 中出现错误

    我最近尝试将 Angular 10 升级到 Angular 12 但是 当我在浏览器中运行该项目时 我在控制台中收到此错误 vendor js 55447 Uncaught TypeError Cannot read property Di
  • UITableView 仅反弹底部边缘

    是否可以弹跳UITableView在底部 但不在顶部 如果是这样 请告诉我代码 而不是改变bounces属性 我将其添加到UIScrollViewDelgate method void scrollViewDidScroll UIScrol
  • Leaflet.js 带有非真实世界地图!坐标

    我正在用传单 JS 创建 Day Z 游戏 的地图 并且想要 能够使用游戏中的坐标系在地图上绘制项目 请参见http dayz ollieb net http dayz ollieb net 在游戏中 左上角的坐标是 000 000 然后是
  • 使用android webview在浏览器中打开外部链接

    我有这段代码 但不是因为它有效 它一直在网络视图中打开 我想要的是这些链接不属于我在默认浏览器中打开的网站 任何想法 谢谢 private class CustomWebViewClient extends WebViewClient Ov
  • 如何使用NSComparator?

    我想知道以下问题是否可以使用NSComparator or not 我有两个数组 两者都保存数据模型 我在数据模型中有一个名为Rank的属性 现在我想比较两个数组 并想知道其中一个是否拥有排名较高的数据模型 如果是的话我想得到NSCompa
  • Haskell 相当于 C 的 __LINE__

    有没有办法在 Haskell 中获取行号 回溯信息 就像C的 LINE 宏或Python的traceback extract stack 这对我编写生成 C 代码的 Haskell 程序很有用 该程序将用注释来表示 告诉哪个 Haskell