module Hat.Directory
  (Permissions(Permissions,breadable,bwritable,bexecutable,bsearchable)
    ,greadable,gwritable,gexecutable,gsearchable,hreadable,hwritable,hexecutable
    ,hsearchable,areadable,awritable,aexecutable,asearchable,aPermissions
    ,gcreateDirectory,acreateDirectory,hcreateDirectory,gremoveDirectory
    ,aremoveDirectory,hremoveDirectory,gremoveFile,aremoveFile,hremoveFile
    ,grenameDirectory,arenameDirectory,hrenameDirectory,grenameFile,arenameFile
    ,hrenameFile,ggetDirectoryContents,agetDirectoryContents
    ,hgetDirectoryContents,ggetCurrentDirectory,gsetCurrentDirectory
    ,asetCurrentDirectory,hsetCurrentDirectory,gdoesFileExist,adoesFileExist
    ,hdoesFileExist,gdoesDirectoryExist,adoesDirectoryExist,hdoesDirectoryExist
    ,ggetPermissions,agetPermissions,hgetPermissions,gsetPermissions
    ,asetPermissions,hsetPermissions) 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.DirectoryBuiltinTypes 
import Hat.DirectoryBuiltin 
import Hat.TimeBuiltin 
import qualified System.Directory as Directory 

instance Eq (Permissions)
  where
  
  (!==) (%==) p = T.uconstUse (%==) p (|==)
  
  (|==) =
    T.uconstDef T.mkRoot (+$!=&=$!=$+==)
      (\ p -> gprimPermissionsEq T.mkNoSrcPos p)
  

instance Ord (Permissions)
  where
  
  gcompare pcompare p = T.uconstUse pcompare p scompare
  
  scompare =
    T.uconstDef T.mkRoot a23v3v23v34compare
      (\ p -> gprimPermissionsCompare T.mkNoSrcPos p)
  
  (!<=) (%<=) p = T.uconstUse (%<=) p (|<=)
  
  (|<=) =
    T.uconstDef T.mkRoot (+$&=&=$&=$@<=)
      (\ p -> gprimPermissionsLeEq T.mkNoSrcPos p)
  

instance Read (Permissions)
  where
  
  greadsPrec preadsPrec p = T.uconstUse preadsPrec p sreadsPrec
  
  sreadsPrec =
    T.uconstDef T.mkRoot a27v3v27v38readsPrec
      (\ p -> gprimPermissionsReadsPrec T.mkNoSrcPos p)
  

instance Show (Permissions)
  where
  
  gshowsPrec pshowsPrec p = T.uconstUse pshowsPrec p sshowsPrec
  
  sshowsPrec =
    T.uconstDef T.mkRoot a30v3v30v38showsPrec
      (\ p -> gprimPermissionsShowsPrec T.mkNoSrcPos p)
  

gprimPermissionsEq ::
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun Permissions (T.Fun Permissions Bool))

gprimPermissionsEq pprimPermissionsEq p =
  T.ufun2 aprimPermissionsEq pprimPermissionsEq p hprimPermissionsEq

hprimPermissionsEq z1primPermissionsEq z2primPermissionsEq kprimPermissionsEq =
  fromBool kprimPermissionsEq
    ((toPermissions kprimPermissionsEq z1primPermissionsEq)
      Prelude.==
      (toPermissions kprimPermissionsEq z2primPermissionsEq))

gprimPermissionsCompare ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun Permissions (T.Fun Permissions Ordering))

gprimPermissionsCompare pprimPermissionsCompare p =
  T.ufun2 aprimPermissionsCompare pprimPermissionsCompare p
    hprimPermissionsCompare

hprimPermissionsCompare z1primPermissionsCompare z2primPermissionsCompare
  kprimPermissionsCompare =
  fromOrdering kprimPermissionsCompare
    (Prelude.compare
      (toPermissions kprimPermissionsCompare z1primPermissionsCompare)
      (toPermissions kprimPermissionsCompare z2primPermissionsCompare))

gprimPermissionsLeEq ::
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun Permissions (T.Fun Permissions Bool))

gprimPermissionsLeEq pprimPermissionsLeEq p =
  T.ufun2 aprimPermissionsLeEq pprimPermissionsLeEq p hprimPermissionsLeEq

hprimPermissionsLeEq z1primPermissionsLeEq z2primPermissionsLeEq
  kprimPermissionsLeEq =
  fromBool kprimPermissionsLeEq
    ((toPermissions kprimPermissionsLeEq z1primPermissionsLeEq)
      Prelude.<=
      (toPermissions kprimPermissionsLeEq z2primPermissionsLeEq))

gprimPermissionsReadsPrec ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R (T.Fun Int (T.Fun String (T.List (T.Tuple2 Permissions String))))

gprimPermissionsReadsPrec pprimPermissionsReadsPrec p =
  T.ufun2 aprimPermissionsReadsPrec pprimPermissionsReadsPrec p
    hprimPermissionsReadsPrec

hprimPermissionsReadsPrec z1primPermissionsReadsPrec z2primPermissionsReadsPrec
  kprimPermissionsReadsPrec =
  (fromList (T.fromTuple2 fromPermissions fromString)) kprimPermissionsReadsPrec
    (Prelude.readsPrec
      (T.toInt kprimPermissionsReadsPrec z1primPermissionsReadsPrec)
      (toString kprimPermissionsReadsPrec z2primPermissionsReadsPrec))

gprimPermissionsShowsPrec ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun Int (T.Fun Permissions (T.Fun String String)))

gprimPermissionsShowsPrec pprimPermissionsShowsPrec p =
  T.ufun3 aprimPermissionsShowsPrec pprimPermissionsShowsPrec p
    hprimPermissionsShowsPrec

hprimPermissionsShowsPrec z1primPermissionsShowsPrec z2primPermissionsShowsPrec
  z3primPermissionsShowsPrec kprimPermissionsShowsPrec =
  fromString kprimPermissionsShowsPrec
    (Prelude.showsPrec
      (T.toInt kprimPermissionsShowsPrec z1primPermissionsShowsPrec)
      (toPermissions kprimPermissionsShowsPrec z2primPermissionsShowsPrec)
      (toString kprimPermissionsShowsPrec z3primPermissionsShowsPrec))

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

gcreateDirectory pcreateDirectory p =
  T.ufun1 acreateDirectory pcreateDirectory p hcreateDirectory

hcreateDirectory z1createDirectory kcreateDirectory =
  (T.fromIO T.fromTuple0) kcreateDirectory
    (Directory.createDirectory (toString kcreateDirectory z1createDirectory))

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

gremoveDirectory premoveDirectory p =
  T.ufun1 aremoveDirectory premoveDirectory p hremoveDirectory

hremoveDirectory z1removeDirectory kremoveDirectory =
  (T.fromIO T.fromTuple0) kremoveDirectory
    (Directory.removeDirectory (toString kremoveDirectory z1removeDirectory))

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

gremoveFile premoveFile p = T.ufun1 aremoveFile premoveFile p hremoveFile

hremoveFile z1removeFile kremoveFile =
  (T.fromIO T.fromTuple0) kremoveFile
    (Directory.removeFile (toString kremoveFile z1removeFile))

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

grenameDirectory prenameDirectory p =
  T.ufun2 arenameDirectory prenameDirectory p hrenameDirectory

hrenameDirectory z1renameDirectory z2renameDirectory krenameDirectory =
  (T.fromIO T.fromTuple0) krenameDirectory
    (Directory.renameDirectory (toString krenameDirectory z1renameDirectory)
      (toString krenameDirectory z2renameDirectory))

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

grenameFile prenameFile p = T.ufun2 arenameFile prenameFile p hrenameFile

hrenameFile z1renameFile z2renameFile krenameFile =
  (T.fromIO T.fromTuple0) krenameFile
    (Directory.renameFile (toString krenameFile z1renameFile)
      (toString krenameFile z2renameFile))

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

ggetDirectoryContents pgetDirectoryContents p =
  T.ufun1 agetDirectoryContents pgetDirectoryContents p hgetDirectoryContents

hgetDirectoryContents z1getDirectoryContents kgetDirectoryContents =
  (T.fromIO (fromList fromString)) kgetDirectoryContents
    (Directory.getDirectoryContents
      (toString kgetDirectoryContents z1getDirectoryContents))

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

ggetCurrentDirectory pgetCurrentDirectory p =
  T.uconstUse pgetCurrentDirectory p sgetCurrentDirectory

sgetCurrentDirectory =
  T.uconstDef T.mkRoot agetCurrentDirectory
    (\ p -> (T.fromIO fromString) p Directory.getCurrentDirectory)

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

gsetCurrentDirectory psetCurrentDirectory p =
  T.ufun1 asetCurrentDirectory psetCurrentDirectory p hsetCurrentDirectory

hsetCurrentDirectory z1setCurrentDirectory ksetCurrentDirectory =
  (T.fromIO T.fromTuple0) ksetCurrentDirectory
    (Directory.setCurrentDirectory
      (toString ksetCurrentDirectory z1setCurrentDirectory))

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

gdoesFileExist pdoesFileExist p =
  T.ufun1 adoesFileExist pdoesFileExist p hdoesFileExist

hdoesFileExist z1doesFileExist kdoesFileExist =
  (T.fromIO fromBool) kdoesFileExist
    (Directory.doesFileExist (toString kdoesFileExist z1doesFileExist))

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

gdoesDirectoryExist pdoesDirectoryExist p =
  T.ufun1 adoesDirectoryExist pdoesDirectoryExist p hdoesDirectoryExist

hdoesDirectoryExist z1doesDirectoryExist kdoesDirectoryExist =
  (T.fromIO fromBool) kdoesDirectoryExist
    (Directory.doesDirectoryExist
      (toString kdoesDirectoryExist z1doesDirectoryExist))

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

ggetPermissions pgetPermissions p =
  T.ufun1 agetPermissions pgetPermissions p hgetPermissions

hgetPermissions z1getPermissions kgetPermissions =
  (T.fromIO fromPermissions) kgetPermissions
    (Directory.getPermissions (toString kgetPermissions z1getPermissions))

gsetPermissions ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun String (T.Fun Permissions (IO T.Tuple0)))

gsetPermissions psetPermissions p =
  T.ufun2 asetPermissions psetPermissions p hsetPermissions

hsetPermissions z1setPermissions z2setPermissions ksetPermissions =
  (T.fromIO T.fromTuple0) ksetPermissions
    (Directory.setPermissions (toString ksetPermissions z1setPermissions)
      (toPermissions ksetPermissions z2setPermissions))

tDirectory = T.mkModule "Directory" "Directory.hs" Prelude.False

aprimPermissionsEq =
  T.mkVariable tDirectory 320001 330056 3 2 "primPermissionsEq" Prelude.False

aprimPermissionsCompare =
  T.mkVariable tDirectory 350001 360065 3 2 "primPermissionsCompare"
    Prelude.False

aprimPermissionsLeEq =
  T.mkVariable tDirectory 380001 390058 3 2 "primPermissionsLeEq" Prelude.False

aprimPermissionsReadsPrec =
  T.mkVariable tDirectory 410001 420047 3 2 "primPermissionsReadsPrec"
    Prelude.False

aprimPermissionsShowsPrec =
  T.mkVariable tDirectory 440001 450067 3 3 "primPermissionsShowsPrec"
    Prelude.False

acreateDirectory =
  T.mkVariable tDirectory 480001 490033 3 1 "createDirectory" Prelude.False

aremoveDirectory =
  T.mkVariable tDirectory 500001 510033 3 1 "removeDirectory" Prelude.False

aremoveFile =
  T.mkVariable tDirectory 520001 530028 3 1 "removeFile" Prelude.False

arenameDirectory =
  T.mkVariable tDirectory 540001 550043 3 2 "renameDirectory" Prelude.False

arenameFile =
  T.mkVariable tDirectory 560001 570038 3 2 "renameFile" Prelude.False

agetDirectoryContents =
  T.mkVariable tDirectory 590001 600038 3 1 "getDirectoryContents" Prelude.False

agetCurrentDirectory =
  T.mkVariable tDirectory 610001 620027 3 0 "getCurrentDirectory" Prelude.False

asetCurrentDirectory =
  T.mkVariable tDirectory 630001 640037 3 1 "setCurrentDirectory" Prelude.False

adoesFileExist =
  T.mkVariable tDirectory 660001 670030 3 1 "doesFileExist" Prelude.False

adoesDirectoryExist =
  T.mkVariable tDirectory 680001 690035 3 1 "doesDirectoryExist" Prelude.False

agetPermissions =
  T.mkVariable tDirectory 710001 720031 3 1 "getPermissions" Prelude.False

asetPermissions =
  T.mkVariable tDirectory 730001 740046 3 2 "setPermissions" Prelude.False

(+$!=&=$!=$+==) = T.mkVariable tDirectory 200004 200026 16 0 "==" Prelude.False

a23v3v23v34compare =
  T.mkVariable tDirectory 230003 230034 3 0 "compare" Prelude.False

(+$&=&=$&=$@<=) = T.mkVariable tDirectory 240004 240028 16 0 "<=" Prelude.False

a27v3v27v38readsPrec =
  T.mkVariable tDirectory 270003 270038 3 0 "readsPrec" Prelude.False

a30v3v30v38showsPrec =
  T.mkVariable tDirectory 300003 300038 3 0 "showsPrec" Prelude.False