Parsing 在Haskell应用程序中创建Haskell REPL

Parsing 在Haskell应用程序中创建Haskell REPL,parsing,haskell,read-eval-print-loop,Parsing,Haskell,Read Eval Print Loop,我正在尝试在我的一个Haskell应用程序中嵌入一个Haskell REPL。其想法是,默认情况下只加载Haskell库的一个子集,再加上我自己的函数集,用户将使用这些函数与环境交互 要解决这个问题,我知道一种方法是创建一个(迷你)Haskell解析器+计算器,并将迷你Haskell解析器的函数映射到实际的Haskell函数,但我相信有更好的方法来实现这一点 使用Haskell为Haskell构建REPL有没有一种好的、干净的方法 一些已经存在的东西: 当然,GHCi既可以查看它是如何实现的,

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

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


使用Haskell为Haskell构建REPL有没有一种好的、干净的方法

一些已经存在的东西:

  • 当然,GHCi既可以查看它是如何实现的,也可以直接使用它(即,让您的REPL通过stdin/stdout与GHCi对话)
  • 它可以让您钩住GHC,让它为您完成所有繁重的工作——加载文件、追踪依赖项、解析、类型检查等等
  • ,这是一个围绕GHCAPI子集的包装器,重点是交互式解释而不是编译——这似乎适合您想要做的事情
  • ,一个对加载模块、资源使用等有限制的评估器,基本上是一种“安全”的交互模式。这是lambdabot使用的,如果你曾经在哈斯克尔IRC频道

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

使用GHC库是您的选择吗?(它们提供了大量与已编译Haskell代码交互的方法)是的,这是一种选择,但我没有使用它们的经验。你能告诉我正确的图书馆在哪里吗?我可以看看吗?看看怎么样?@CharlieP:你可能想看看。+1个好问题。我肯定会用有效的示例代码来回答这个问题。