ddci-core-0.2.0.1: DDCI/Core/Command/Ast.hs
module DDCI.Core.Command.Ast
(cmdAst)
where
import DDCI.Core.Command.Check
import DDCI.Core.State
import qualified Language.Haskell.Exts.Parser as H
import qualified Language.Haskell.Exts.Pretty as H
-- | Parse, check, and pretty print an expression's internal representation
cmdAst :: State -> Int -> String -> IO ()
cmdAst state lineStart str
= cmdParseCheckExp state lineStart str >>= goShow
where
-- Expression had a parse or type error.
goShow Nothing
= return ()
-- Expression is well-typed.
goShow (Just (x, _tX, _effX, _cloX))
= let p = pretty x in
putStrLn p
pretty x
= case H.parseExp (show x) of
H.ParseOk parsed -> H.prettyPrint parsed
err -> show err