packages feed

ddc-tools-0.4.3.1: src/ddci-tetra/DDCI/Tetra/Command/Desugar.hs

{-# LANGUAGE TypeFamilies #-}
module DDCI.Tetra.Command.Desugar
        (cmdDesugar)
where
import DDC.Driver.Interface.Source
import DDCI.Tetra.State
import DDC.Data.Pretty
import DDC.Source.Tetra.Lexer
import DDC.Source.Tetra.Parser
import DDC.Source.Tetra.Pretty          ()
import DDC.Source.Tetra.Transform.Defix
import qualified DDC.Core.Lexer         as C
import qualified DDC.Control.Parser     as BP


cmdDesugar :: State -> Source -> String -> IO ()
cmdDesugar _state source str
 = goLex
 where  goLex 
         = let  tokens  = lexModuleString (nameOfSource source) 1 str
           in   goParse tokens

        goParse tokens
         = case BP.runTokenParser
                C.describeToken (nameOfSource source)
                pModule tokens of
                 Left err        -> error $ show err
                 Right mm        -> goDesugar mm

        goDesugar mm
         = case defix defaultFixTable mm of
            Left err    -> putStrLn (renderIndent $ ppr err)
            Right mm'   -> putStrLn (renderIndent $ ppr mm')