问题标签 [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.

0 投票
4 回答
1803 浏览

haskell - 需要一个使用 GHC 来解析和检查 Haskell 的教程

我正在研究一个分析 Haskell 代码的项目。我决定使用 GHC 来解析源代码和推断类型,而不是编写我自己的代码来做这件事。现在,我正在阅读 Haddock 文档,但进展缓慢。有谁知道好的教程吗?

编辑:澄清一下,我不是在寻找像 hlint 这样的东西。我正在编写自己的工具来分析 Haskell 代码的运行时特性,所以就像我在编写不同的 hlint。我正在寻找的基本上是 wiki 页面GHC As a library的扩展。

0 投票
3 回答
2741 浏览

haskell - 使用 GHC API 评估 Haskell 语句/表达式

对于我正在编写的工具(http://hackage.haskell.org/package/explore),我需要一种在运行时读取 haskell 函数定义的方法,将它们应用于我的工具中的值并检索其应用程序的结果.

谁能给我一个使用 GHC(6.10.4 或 6.12.1)API 的非常基本的示例?

在运行时从文件中读取的示例函数定义:

预期的程序输出

!!更新!!
我发布了一个快速答案,但它在执行目录中创建了一个目标文件,任何避免这种情况和避免所有文件 IO 的提示都是最受欢迎的。我还希望看到一个可以在内存中完成所有操作的版本:例如,用户在 GUI 中提供函数定义,并且编译/评估不会创建任何目标文件。

0 投票
2 回答
377 浏览

haskell - 是否可以在编译时使用 GHC API 修改程序?

我想通过搭载 GHC 编译过程并更改其核心表示来测试编译器优化的实现。这个想法是有类似的东西:

wheremodify获取核心表示并返回修改后的版本。但是,此代码失败(即使 modify 根本不执行任何操作)并显示不是很有帮助的消息:

关于如何完成这项工作的任何想法,或者是否有可能以这种方式实现代码转换?

0 投票
1 回答
422 浏览

windows - 在 Windows 上部署应用程序的 GHC API 的简单方法

我想在需要访问 GHC API 的 Windows 上部署一个应用程序。使用 Wiki 中的第一个简单示例:

http://www.haskell.org/haskellwiki/GHC/As_a_library

导致以下错误(在具有 haskell 平台的一台机器上编译并在另一个干净的 Windows 安装上执行): test.exe: can't find a package database at C:\haskell\lib\package.conf.d

我想将我的应用程序部署为一个简单的 zip 文件,并且不需要用户安装任何东西。有没有一种简单的方法可以将所需的 GHC 内容包含在该 zip 文件中以便它可以工作?

0 投票
2 回答
1023 浏览

haskell - 使用 GHC 的 API 或提示从已编译的二进制文件中导入已知函数

我有一个模块Target,里面有一个函数Target.accessMe。我以某种方式编译这个模块,然后去掉源代码。

现在,我必须执行哪些神秘的咒语才能使不同的程序动态导入Target.accessMe?该程序预先知道accessMe's 的类型。Target另外,请考虑源代码不可用的事实。

plugins软件包设法实现了这一点,但在 Windows 上工作似乎存在严重问题。我已经检查了plugins的来源,但无法理解它。

我试过使用Hint,但只能找出如何评估我有源代码的代码。

谢谢你的帮助!

0 投票
1 回答
187 浏览

haskell - 使用从源代码编译的 GHC 的 GHC API

我想在客户端程序中使用 GHC 修改版本的 GHC API。获取 GHC 源代码并构建和安装修改后的 GHC 很容易,但是安装修改后的 GHC 会导致所有旧的(Cabal)依赖项中断。

因此,我不能使用 GHC API,因为 ghc -v 说:

软件包 ghc-7.0.3-... 由于缺少或递归依赖项而无法使用:...

关于如何进行的任何线索?

谢谢!,

兰吉特。

0 投票
2 回答
1274 浏览

haskell - Haskell中通过unsafePerformIO的全局变量

GHC API 要求在调用之前进行一些初始化。具体来说,parseStaticFlags只能调用一次。

我有可以runGhc :: MaybeFilePath :: Ghc a -> IO a多次调用来运行一些 GHC API 方法的函数。但是,其中一些初始化应该只在第一次调用该函数时发生。

我似乎从Yi源代码中记得可以创建一个全局变量,例如

所以在调用的单子动作中runGhc我们可以有

但是,我不记得它是如何完成的。此代码位于runMonad包装 a 的 monad 的函数中GhcMonad。我很清楚使用unsafePerformIO不是纯粹的或功能性的,但(当时)这是实现实际结果的最佳方式。

[编辑:工作解决方案:

所以在调用的单子动作中runGhc我们可以有

0 投票
2 回答
349 浏览

haskell - 为什么不能在提示中将顶级模块设置为主模块

为什么不能在 Hint (Language.Haskell.Interpreter) 中将顶级模块设置为“Main”?

请允许我演示一下:

将导致:

0 投票
1 回答
477 浏览

haskell - 如何在提示中强制解释

如何在提示(Language.Haskell.Interpreter)中强制解释模式?

我有这个代码:

将导致(基于此处的答案):

仅当 GHC 找到 test.o 时!

我试过了

0 投票
1 回答
202 浏览

haskell - Haskell 抽象语法表达式的动态加载

我们可以使用 GHC API 或其他东西来加载不是文本源模块,而是 AST 表达式,类似于haskell-src-extsExp类型?这样我们可以节省代码生成和解析的时间。