我正在尝试检查以字符串形式提供的代码段。
我发现包haskell-type-exts(hackage link)似乎提供了我需要的东西:使用parseModule
构建一个可以应用typecheckModule
的AST。但后来我不知道如何处理结果。它的类型为Tc VarEnv
,其中Tc
是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?
我在这里缺少什么?也许模块只是被错误隐藏了?
答案 0 :(得分:1)
我认为此套餐尚未准备好使用。只需看看source of Language.Haskell.TypeCheck。例如typeCheck = undefined
typechecks当然!
您可以尝试使用GHC-API(Haddock和Wiki页面)。