【问题标题】:Creating a Haskell REPL within a Haskell application在 Haskell 应用程序中创建 Haskell REPL
【发布时间】:2011-09-29 03:51:43
【问题描述】:

我正在尝试在我的一个 Haskell 应用程序中嵌入一个 Haskell REPL。这个想法是默认情况下只加载 Haskell 库的一个子集,外加我自己的一组函数,用户将使用这些函数与环境进行交互。

为了解决这个问题,我知道一种方法是创建一个 (mini-)Haskell 解析器 + 求值器并将我的 mini-Haskell 解析器的函数映射到实际的 Haskell 函数,但我确信有更好的方法来做这个。

有没有一种使用 Haskell 为 Haskell 构建 REPL 的好方法?

【问题讨论】:

  • 您是否可以选择使用 GHC 库? (它们提供了大量与已编译的 Haskell 代码交互的方式)
  • 是的,这是一个选项,但我没有使用它们的经验。你能指导我到正确的图书馆,以便我看看吗?
  • 看看haskell.org怎么样?
  • @CharlieP:你可能想看看the hint package
  • +1 好问题。我肯定会用有效的示例代码来回答这个问题。

标签: parsing haskell read-eval-print-loop


【解决方案1】:

一些已经存在的东西:

  • 当然,GHCi 既可以查看其实现方式,也可以直接使用它(即,让您的 REPL 只通过 stdin/stdout 与 GHCi 对话)。
  • full GHC API,它可以让您连接到 GHC 并让它为您完成所有繁重的工作 - 加载文件、跟踪依赖项、解析、类型检查等。
  • hint,它是 GHC API 子集的包装器,侧重于交互式解释而不是编译——这似乎适合您想要做的事情。
  • mueval,一个对加载的模块、资源使用等有限制的评估器,基本上是一种“安全”的交互模式。如果您曾在#haskell IRC 频道上过,那就是 lambdabot 使用的东西。

以上所有内容都假设您不想自己编写 Haskell 解释器,这可能就是这种情况。

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多