som*_*unt 13 haskell typechecking
我试图检查作为字符串提供的代码片段.
我发现包haskell-type- exts(hackage link)似乎提供了我需要的东西:用parseModuleAST构建typecheckModule可以应用的.但后来我不知道如何处理结果.这类型的Tc VarEnv地方Tc是一个单子.
该软件包提供了一个测试用例,其中使用了类似的东西:
ea <- runTc testEnv $ typecheckExp e
Run Code Online (Sandbox Code Playgroud)
但是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?
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?也许这个模块只是被错误隐藏了?
我认为这个包还没有准备好使用。只需查看Language.Haskell.TypeCheck 的来源即可。当然例如typeCheck = undefined类型检查!
您可以尝试使用 GHC-API(Haddock 和 Wiki 页面)。