content: {-
  This is a main program for testing the type checker. You can run it like this
  
    tstTI [flags] file_1 ... file_n
  
  where flags include
  
     -debug +debug: turn off/on verbose output
     -utf8 +utf8: turn off/on the use of unicode characters in the output
  
  The files should contain the Haskell modules to be type checked. All modules
  implicitly import the Prelude, so one of the files must contain a module
  called Prelude.
  
  Mutually recursive modules are accepted.
  -}
  
  import HsParser(parse)
  import HsModule(HsModuleI(..))
  import TiDecorate(TiDecls)
  --import TiBase
  --import ParsedSyntax(HsModuleR)
  import TiHsName()
  import ReAssocBase()
  import ScopeNamesBase()
  import NameMapsBase()
  import PPU(ppu,getPPopts,ucatch)
  import PrettySymbols(happy)
  import PrettyPrint(($$))
  import TiProgram(tcProgramFiles)
  import MUtils(( # ))
  import DirUtils(expand)
  
  main =
    do (o@(u,_),_,args) <- getPPopts
       ucatch u (tstTi o =<< expand args)
  
  tstTi o files =
    putStrLn =<< (ppu o.($$happy).r.fst # tcProgramFiles parse files)
  
  r = id :: I [[HsModuleI i1 (TiDecls i2)]]
  --r = id :: I [[HsModuleR]]
  type I a = a->a
  