content: {-# language DataKinds #-}
  module Main where
  
  import Control.Lens
  
  import Programs
  import FixMutableDefaultArguments
  import OptimizeTailRecursion
  import Indentation
  import Recase
  import Validation
  
  import Language.Python.Render (showModule)
  import Language.Python.Syntax.Statement (_Statements)
  
  import qualified Data.Text.IO as StrictText
  
  section a = do
    putStrLn "**********"
    a
    putStrLn "\n**********\n"
  
  main = do
    section $ do
      putStrLn "Before\n"
      StrictText.putStrLn $ showModule everything
  
    section $ do
      putStrLn "Spaced\n"
      StrictText.putStrLn .
        showModule $
        everything & _Statements %~ indentSpaces 2
  
    section $ do
      putStrLn "Tabbed\n"
      StrictText.putStrLn .
        showModule $
        everything & _Statements %~ indentTabs
  
    section $ do
      putStrLn "Refactored\n"
      StrictText.putStrLn .
        showModule .
        rewriteOn _Statements fixMutableDefaultArguments .
        rewriteOn _Statements optimizeTailRecursion $
        everything
  
    section $ do
      putStrLn "Validated\n"
    doValidating
  
    section $ do
      putStrLn "Recased\n"
    recase
  