我正在尝试对作为字符串提供的代码片段进行类型检查。
我发现包 haskell-type-exts (hackage 链接)似乎提供了我需要的东西:parseModule
构造了一个typecheckModule
可以应用的 AST。但后来我不知道如何处理结果。它是类型Tc VarEnv
where Tc
is a monad。
该包提供了一个测试用例,其中使用了类似的东西:
ea <- runTc testEnv $ typecheckExp e
但是runTc
在一个隐藏的模块中,所以我不能使用它。这是我到目前为止的代码:
import Language.Haskell.Exts.Parser (parseModule, ParseResult(..))
import Language.Haskell.TypeCheck.TypeCheck
-- import Language.Haskell.TypeCheck.Monad --hidden module
main = do
let m = "myTest = map (+1) [1..10]"
let r = parseModule m
case r of
ParseOk res -> printStuff res
_ -> print "wtf"
printStuff r = do
let Right tc = return $ typecheckModule r
-- print tc?
我在这里想念什么?也许模块只是被错误地隐藏了?