module Hat.System
  (ExitCode(ExitSuccess,ExitFailure),aExitSuccess,aExitFailure,ggetArgs
    ,ggetProgName,ggetEnv,agetEnv,hgetEnv,gsystem,asystem,hsystem,gexitWith
    ,aexitWith,hexitWith,gexitFailure) where

import qualified Hat.PreludeBasic 
import qualified Prelude 
import Hat.Hack 
import qualified Hat.Hat as T 
import Hat.Hat  (WrapVal(wrapVal))
import Hat.Prelude 
import Hat.PreludeBuiltinTypes 
import Hat.SystemBuiltinTypes 
import Hat.SystemBuiltin 
import qualified System.Cmd as Cmd 
import qualified System.Environment as Environment 
import qualified System.Exit as Exit 

ggetArgs :: T.RefSrcPos -> T.RefExp -> T.R (IO (T.List String))

ggetArgs pgetArgs p = T.uconstUse pgetArgs p sgetArgs

sgetArgs =
  T.uconstDef T.mkRoot agetArgs
    (\ p -> (T.fromIO (fromList fromString)) p Environment.getArgs)

ggetProgName :: T.RefSrcPos -> T.RefExp -> T.R (IO String)

ggetProgName pgetProgName p = T.uconstUse pgetProgName p sgetProgName

sgetProgName =
  T.uconstDef T.mkRoot agetProgName
    (\ p -> (T.fromIO fromString) p Environment.getProgName)

ggetEnv :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun String (IO String))

ggetEnv pgetEnv p = T.ufun1 agetEnv pgetEnv p hgetEnv

hgetEnv z1getEnv kgetEnv =
  (T.fromIO fromString) kgetEnv (Environment.getEnv (toString kgetEnv z1getEnv))

gsystem :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun String (IO ExitCode))

gsystem psystem p = T.ufun1 asystem psystem p hsystem

hsystem z1system ksystem =
  (T.fromIO fromExitCode) ksystem (Cmd.system (toString ksystem z1system))

gexitWith :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun ExitCode (IO a))

gexitWith pexitWith p = T.ufun1 aexitWith pexitWith p hexitWith

hexitWith z1exitWith kexitWith =
  (T.fromIO T.fromId) kexitWith
    (Exit.exitWith (toExitCode kexitWith z1exitWith))

gexitFailure :: T.RefSrcPos -> T.RefExp -> T.R (IO a)

gexitFailure pexitFailure p = T.uconstUse pexitFailure p sexitFailure

sexitFailure =
  T.uconstDef T.mkRoot aexitFailure
    (\ p -> (T.fromIO T.fromId) p Exit.exitFailure)

tSystem = T.mkModule "System" "System.hs" Prelude.False

agetArgs = T.mkVariable tSystem 130001 140014 3 0 "getArgs" Prelude.False

agetProgName =
  T.mkVariable tSystem 150001 160018 3 0 "getProgName" Prelude.False

agetEnv = T.mkVariable tSystem 170001 180023 3 1 "getEnv" Prelude.False

asystem = T.mkVariable tSystem 190001 200023 3 1 "system" Prelude.False

aexitWith = T.mkVariable tSystem 210001 220027 3 1 "exitWith" Prelude.False

aexitFailure =
  T.mkVariable tSystem 230001 240018 3 0 "exitFailure" Prelude.False