问题标签 [ghc-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 是否可以在运行时生成和运行 TemplateHaskell 生成的代码?
是否可以在运行时生成和运行 TemplateHaskell 生成的代码?
在运行时使用 C,我可以:
- 创建函数的源代码,
- 调用 gcc 将其编译为 .so (linux)(或使用 llvm 等),
- 加载 .so 和
- 调用函数。
模板 Haskell 是否可以做类似的事情?
debugging - 为什么 GHC 中直接导入的函数与我用从 GHC 库复制的源代码编写的函数有很大不同
问题1:这filter
是从 的库中复制GHC
的,但是为什么它消耗越来越多的内存与直接导入的相比filter
,它消耗的内存数量是恒定的。
问题2:这个filter
是从库里复制过来GHC
的,但是为什么和直接使用的一样消耗越来越多的内存,和直接导入的相比,消耗的内存也越来越多。elem
filter
GHC 版本:7.4.2 操作系统:Ubuntu 12.10 编译 -O2 优化
正如上面的filter
andelem
的定义所暗示的, p = filter (==1000000000000) [0..]
ands = 1000000000000 `elem` [0..]
都[0..]
应该逐渐被垃圾回收。但两者都p
消耗s
越来越多的内存。而r
其中定义的直接导入filter
会消耗一定数量的内存。
我的问题是为什么 GHC 中直接导入的函数与我使用从 GHC 库复制的源代码编写的函数有很大不同。我想知道GHC是否有问题?
我还有一个问题:上面的代码是从我写的一个项目中抽象出来的,这个项目也面临着“消耗越来越多的内存,理论上应该是垃圾回收”的问题。所以我想知道有没有办法找到 GHC 中哪个变量占用了这么多内存。
感谢您的阅读。
haskell - 推断包含 Haskell 表达式的字符串的类型
我需要一种(快速而肮脏的)方法来获得以字符串形式给出的 Haskell 表达式类型的某种表示。
我目前看到 3 个选项:
- 使用 GHC API——然而,文档很快让我失去了兴趣。
- 使用其他类型推断工具——有人建议我尝试使用 haskell-type-exts,但除了最简单的表达式之外,它无法输入所有内容。我不知道任何其他这样的工具。
- 滚动我自己的 HM 推断器——除非绝对必要,否则我会避免这种情况
我什至不需要一个完整的解决方案,因为可以键入 Haskell 的合理基本子集的库/工具对我来说就足够了。
那么实现这一目标的最简单方法是什么?
haskell - 动态加载已编译的 Haskell 模块 - GHC 7.6
我正在尝试使用 GHC API 动态编译和加载 Haskell 模块。我知道 API 从一个版本到另一个版本波动很大,所以我专门谈论 GHC 7.6.*。
我尝试在 MacOS 和 Linux 上运行相同的代码。在这两种情况下,插件模块都可以正常编译,但在加载时会出现以下错误:Cannot add module Plugin to context: not interpreted
该问题与此问题类似,其中模块仅在主机程序的同一运行中编译时才会加载。
和插件:
haskell - 我可以在运行时从字符串编译haskell函数(使用插件)吗?
我有一个应用程序,由于各种原因,我需要运行任意的用户提供的代码。(SafeHaskell 使这变得既好又安全)。我查看了插件包,它非常适合从光盘上的 .hi 文件加载。
但是,对于我的程序设计,如果我可以将这些用户程序存储在数据库中,然后直接将它们编译为我可以在我的程序中使用的函数,那将是理想的选择。
因此,如果我正在编译的函数具有以下类型:
我正在寻找一些可以从字符串生成该函数的函数:
其中 string 包含“someFunction”的 haskell 代码。
有谁知道是否有办法做到这一点,最好使用插件包?我遇到了一点 GHC API,但我不太了解它以及它与此有何关系。
请注意,我尝试过提示,但它不适合我的应用程序,因为它不是线程安全的。
haskell - 使用 GHC API 进行代码编译的“试运行”
我正在为 Haskell 开发一个相当简单的文本编辑器,我希望能够在用户点击“检查”时突出显示代码中的静态错误。
有没有办法使用 GHC-API 来“试运行”编译 haskell 文件而不实际编译它?我希望能够获取一个字符串并进行正常编译的所有检查,但没有输出。GHC-API 将是理想的,因为这样我就不必解析 GHC 的命令行输出来突出显示错误等。
此外,是否可以对字符串而不是文件进行此检查?(如果没有,我可以把它写到一个临时文件中,这不是非常有效,但可以工作)。
如果这是可能的,您能否提供或指出一个示例如何做到这一点?
这个问题问的是同样的问题,但它来自三年前,当时的答案是“GHC-API 是新的,还没有好的文档”。所以我希望状态已经改变。
编辑:“空运行”限制是因为我在基于 Web 的设置中执行此操作,其中编译发生在服务器端,所以我想避免每次用户点击“检查”时不必要的磁盘读/写。无论如何,可执行文件都会被丢弃,直到他们准备好运行的版本。
haskell - Haskell全程序静态分析的实现技巧
作为基于属性测试的研究项目的一部分,我需要对 Haskell 程序进行静态全程序分析。我正在寻找有关如何对 Haskell 程序进行整体程序分析的建议,希望自己不需要构建大量基础设施。
我查看了 Template Haskell,它具有我需要的许多功能,但缺少一个关键特性:在 GHC 中实现的 Template Haskell 中,似乎无法通过 name 获取函数的定义。(相关的 SO 问题:How to get the declaration of a function using `reify`?)
我怀疑可能有某种方法可以使用 GHC API 对 Haskell 程序进行全程序分析,但我无法从 GHC API 文档中轻松确定如何完成。
特别是,给定一个函数调用站点,我需要能够查找相应的函数定义。我对基于模板 Haskell 或 GHC API 的解决方案特别感兴趣。
有没有办法在不自己构建所有基础设施的情况下对 Haskell 程序进行整个程序分析?
haskell - ghc-mtl 无法使用 ghc-7.8 构建
我正在尝试使用 ghc-7.8.3 构建 ghc-mtl-1.2.1.0 并且收到以下错误消息:
与 ghc-7.8.2 相同的错误。
我试图找出 9000 多个类型和/或模块中的哪一个被称为Ghc
和/或GHC
和/或MonadIO
对此负责,但到目前为止还没有运气。
所以我的问题是:
- 造成这种破损的原因是什么变化?
- 是否可以在不从 7.8.3 降级的情况下修复它?
haskell - 在 GhcMonad 中运行 Q Exp
我正在寻找与此类似的东西:
我正在寻找组合我的两个代码示例的方法;一种用于动态评估haskell 代码,另一种用于使用模板haskell 动态组合haskell。换句话说,在 GhcMonad 中运行 Q 表达式:表达式。
我会解决这个问题,我应该在这里记录。
一些想法
我目前发现可行的方法是将表达式序列化并将其输入到动态评估中。序列化必须以某种方式在 Q monad 内部完成。我也许可以使用 Exp 实现Ppr prettyprinter类。但是,我可能会以这种方式失去一些类型安全性?可能有更清洁(更卫生”?)的方式。我应该更多地研究 Data.Dynamic以了解动态值的工作原理。
编辑:我现在意识到 Dynamic 只代表值,而我想运行 Q Exp 'declarations'。我想将数据类型添加到动态上下文中。