packages feed

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