Я пытаюсь выполнить typecheck фрагмент кода, предоставленный в виде строки.
Я нашел пакет haskell-type-exts (ссылка hackage), который, кажется, обеспечивает то, что мне нужно: С parseModule
AST получает построенный на основе typecheckModule
. Но тогда я не знаю, что делать с результатом. Он имеет тип Tc VarEnv
, где Tc
является монадой.
Пакет содержит тестовый пример, в котором используется нечто подобное:
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?
Что мне здесь не хватает? Может быть, модуль скрыт по ошибке?