推断包含Haskell表达式的字符串的类型

时间:2013-05-04 11:06:49

标签: haskell type-inference ghc-api hindley-milner

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

我目前看到3个选项:

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

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

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

1 个答案:

答案 0 :(得分:17)

hint package为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]