ddc-driver-0.3.1.1: DDC/Driver/Command/Ast.hs
module DDC.Driver.Command.Ast
( cmdAstModule
, cmdAstExp)
where
import DDC.Driver.Command.Check
import DDC.Driver.Source
import DDC.Build.Language
import Control.Monad.Trans.Error
import qualified Language.Haskell.Exts.Parser as H
import qualified Language.Haskell.Exts.Pretty as H
-- | Parse, check, and pretty print a module's internal representation.
cmdAstModule :: Language -> Source -> String -> IO ()
cmdAstModule language source str
| Language bundle <- language
, fragment <- bundleFragment bundle
= do mModule <- runErrorT
$ cmdCheckModuleFromString fragment source str
goShow mModule
where
-- Expression had a parse or type error.
goShow (Left err)
= do putStrLn err
return ()
-- Expression is well-typed.
goShow (Right x)
= let p = pretty x in
putStrLn p
pretty x
= case H.parseExp (show x) of
H.ParseOk parsed -> H.prettyPrint parsed
err -> show err
-- | Parse, check, and pretty print an expression's internal representation.
cmdAstExp :: Language -> Source -> String -> IO ()
cmdAstExp language source str
| Language bundle <- language
, fragment <- bundleFragment bundle
, modules <- bundleModules bundle
= cmdParseCheckExp fragment modules True source str
>>= goShow
where
-- Expression had a parse or type error.
goShow Nothing
= return ()
-- Expression is well-typed.
goShow (Just x)
= let p = pretty x in
putStrLn p
pretty x
= case H.parseExp (show x) of
H.ParseOk parsed -> H.prettyPrint parsed
err -> show err