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

xcv*_*vii 10 haskell type-inference hindley-milner ghc-api

我需要一种(快速和脏的)方法来获得一个以字符串形式给出的Haskell表达式的表示.

我目前看到3个选项:

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

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

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

kos*_*kus 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
Run Code Online (Sandbox Code Playgroud)

如果运行,则打印

Num b => [b] -> [b]
Run Code Online (Sandbox Code Playgroud)