13

我正在尝试对作为字符串提供的代码片段进行类型检查。

我发现包 haskell-type-exts (hackage 链接)似乎提供了我需要的东西:parseModule构造了一个typecheckModule可以应用的 AST。但后来我不知道如何处理结果。它是类型Tc VarEnvwhere Tcis 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?

我在这里想念什么?也许模块只是被错误地隐藏了?

4

1 回答 1

1

我认为这个包还没有准备好使用。只需查看Language.Haskell.TypeCheck 的来源。例如typeCheck = undefined类型检查当然!

您可以尝试使用 GHC-API(Haddock 和 Wiki 页面)。

于 2015-01-10T12:16:47.903 回答