ddc-tools-0.4.2.1: src/ddci-tetra/DDCI/Tetra/Command/Infer.hs
{-# LANGUAGE TypeFamilies #-}
module DDCI.Tetra.Command.Infer
(cmdInfer)
where
import DDCI.Tetra.State
import DDC.Driver.Interface.Source
import DDC.Base.Pretty
import DDC.Source.Tetra.Env
import DDC.Source.Tetra.Lexer
import DDC.Source.Tetra.Parser
import DDC.Source.Tetra.Pretty ()
import DDC.Source.Tetra.Transform.Defix
import DDC.Source.Tetra.Transform.Expand as Expand
import qualified DDC.Core.Lexer as C
import qualified DDC.Base.Parser as BP
cmdInfer :: State -> Source -> String -> IO ()
cmdInfer _state source str
= goLex
where goLex
= let tokens = lexModuleString (nameOfSource source) 1 str
in goParse tokens
goParse tokens
= case BP.runTokenParser C.describeTok (nameOfSource source)
(pModule context) 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' -> goExpand mm'
goExpand mm
= do let mm' = Expand.expand Expand.configDefault
primKindEnv primTypeEnv mm
putStrLn (renderIndent $ ppr mm')