在Haskell应用程序中创建Haskell REPL

Cha*_*ieP 20 parsing haskell read-eval-print-loop

我正在尝试在我的一个Haskell应用程序中嵌入一个Haskell REPL.我们的想法是,默认情况下只加载Haskell库的一个子集,加上我自己的一组函数,用户可以使用它们来与环境进行交互.

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

有没有一种漂亮而干净的方法来使用Haskell为Haskell构建REPL?

C. *_*ann 11

已经存在的一些事情:

  • 当然,GHCi既可以看到它是如何实现的,也可以是直接使用它(即让你的REPL通过stdin/stdout与GHCi对话).
  • 全GHC API,它可以让你挂接到GHC,让它做所有繁重的你-加载文件,追逐的依赖关系,分析,类型检查,等等.
  • 提示,它是GHC API子集的包装器,侧重于交互式解释而不是编译 - 这似乎适合您想要做的事情.
  • mueval,一个对加载模块,资源使用等有限制的评估器,基本上是一种"安全"的交互模式.这就是lambdabot使用的,如果你曾经在#haskell IRC频道.

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