content: module Main (main) where
  
  
  
  import System.Console.ANSI (hSupportsANSI)
  import System.Environment
  import System.IO           (stdout)
  
  import           CmdLineArgs
  import qualified Stg.ExamplePrograms      as Example
  import           Stg.Language.Prettyprint
  import           Stg.RunForPager
  
  
  
  main :: IO ()
  main = do
      opts <- parseCmdArgs =<< getArgs
  
      ansi <- case optAnsi opts of
          Just x -> pure x
          Nothing -> hSupportsANSI stdout
      let numStates = optNumStates opts
          verbosity = optVerbosity opts
  
      let prog = Example.implies True False
  
      _finalState <-
          runForPager (if ansi then richRenderer else plainRenderer)
                      numStates
                      verbosity
                      prog
      pure ()
  
  richRenderer :: Renderer
  richRenderer = Renderer
      { renderProgram   = renderRich . prettyStgi
      , renderState     = renderRich . prettyStgi
      , renderInfo      = renderRich . prettyStgi
      , renderInfoShort = renderRich . prettyStgi
      }
  
  plainRenderer :: Renderer
  plainRenderer = Renderer
      { renderProgram   = renderPlain . unit . prettyStgi
      , renderState     = renderPlain . unit . prettyStgi
      , renderInfo      = renderPlain . unit . prettyStgi
      , renderInfoShort = renderPlain . unit . prettyStgi
      }
  
  unit :: m StgiAnn -> m StgiAnn
  unit = id
  