10

我需要一种(快速而肮脏的)方法来获得以字符串形式给出的 Haskell 表达式类型的某种表示。

我目前看到 3 个选项:

  • 使用 GHC API——然而,文档很快让我失去了兴趣。
  • 使用其他类型推断工具——有人建议我尝试使用 haskell-type-exts,但除了最简单的表达式之外,它无法输入所有内容。我不知道任何其他这样的工具。
  • 滚动我自己的 HM 推断器——除非绝对必要,否则我会避免这种情况

我什至不需要一个完整的解决方案,因为可以键入 Haskell 的合理基本子集的库/工具对我来说就足够了。

那么实现这一目标的最简单方法是什么?

4

1 回答 1

17

hint软件包为 GHC API 提供了一个受限制但可能更易于理解的接口。也许它足以满足您的目的?如果没有,您也许可以查看源以更好地了解如何直接使用 GHC API。

这是一个示例程序:

import Language.Haskell.Interpreter

main :: IO ()
main = do
  r <- runInterpreter $ do
    setImports ["Prelude"]
    typeOf "map (+1)"
  either print putStrLn r

如果运行,则打印

Num b => [b] -> [b]
于 2013-05-04T12:24:33.230 回答