在Haskell应用程序中创建一个Haskell REPL

20

我正在尝试在我的Haskell应用程序中嵌入一个Haskell REPL。想法是默认只加载Haskell库的子集以及我的一组函数,用户将使用这些来与环境交互。

要解决这个问题,我知道一种方法是创建一个(迷你)Haskell解析器+评估器,并将我的迷你Haskell解析器的函数映射到实际的Haskell函数,但我相信有更好的方法来做到这一点。

是否有一种优雅而干净的方法,可以使用Haskell构建Haskell的REPL?


你是否考虑使用 GHC 库?(它们提供了大量与编译后的 Haskell 代码交互的方式) - fuz
是的,这是一个选项,但我没有使用它们的经验。您能指导我正确的库,这样我就可以查看它们吗? - CharlieP
不妨看一下haskell.org - fuz
2
@CharlieP:你可能想看一下hint包 - hammar
+1 好问题。如果有带有可行示例代码的答案,我一定会点赞。 - Dan Burton
1个回答

11

已存在的一些工具:

  • 当然,有 GHCi。你可以查看它的实现方式或直接使用它(即让你的 REPL 通过 stdin/stdout 与 GHCi 进行交互)。
  • 完整的 GHC API,让你能够接入 GHC,并让它为你完成所有繁重的工作——加载文件、跟踪依赖项、解析、类型检查等。
  • hint 是对 GHC API 的一个包装器,专注于交互式解释而非编译——这似乎符合你想做的事情。
  • mueval 是一个评估器,限制了所加载的模块、资源使用等,基本上是一个“安全”的交互式模式。如果你曾经进入 #haskell IRC 频道,那么你应该知道它被 lambdabot 使用。

以上所有选项都假定你不想自己编写一个 Haskell 解释器,这很可能是实际情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接