content: import Parser as P
  import TypeInfer as T
  import MatchCheck as MC
  import Control.Monad.Trans.Writer.Lazy
  import qualified Data.List as List
  
  -- TEST RELATED BEGIN
  import Types
  import TypedAst
  import qualified Data.Map as Map
  import Debug.Hoed.Pure
  
  failType = Record False [("a",IntType),("b",StringType)]
  
  m1 = (TRecordMatchExpr [("a",(TIntMatchExpr 42,IntType)),("b",(TStringMatchExpr "abc",StringType))],Record False [("a",IntType),("b",StringType)])
  m2 = (TRecordMatchExpr [("a",(TVarMatch "n",IntType)),("b",(TStringMatchExpr "def",StringType))],Record False [("a",IntType),("b",StringType)])
  m3 = (TRecordMatchExpr [("a",(TVarMatch "n",IntType)),("b",(TVarMatch "s",StringType))],Record False [("a",IntType),("b",StringType)])
   
  testCovering ty matches = covering Map.empty (ideal Map.empty ty) matches == [Covered]
  -- TEST RELATED END
  
  concreteTest = testCovering failType [m1, m2, m3]
  
  main = printO $ concreteTest
  
  {-
  main :: IO ()
  main = let path = "../test.z"
         in do content <- readFile path
               case P.parse content of
                 Left err -> print err
                 Right ast -> do
                   (typed, env, subst) <- T.infer ast
                   let (b, badMatches) = runWriter (MC.matchCheck env typed)
                   mapM putStrLn (List.map MC.formatMatchWarning badMatches)
                   case b of
                    True -> return () --Continue compilation
                    False -> return () --Abort compilation
  -}
  