{-# LANGUAGE FlexibleContexts, FlexibleInstances, ForeignFunctionInterface, GeneralizedNewtypeDeriving, MonoLocalBinds, MultiParamTypeClasses, ScopedTypeVariables, TypeSynonymInstances, UndecidableInstances #-}
---------- GENERATED FILE, EDITS WILL BE LOST ----------

module Graphics.UI.Qtah.Generated.Core.QDir (
  QDirValue (..),
  QDirConstPtr (..),
  absoluteFilePath,
  absolutePath,
  canonicalPath,
  count,
  dirName,
  exists,
  entryExists,
  filePath,
  filter,
  isAbsolute,
  isReadable,
  isRelative,
  isRoot,
  mkdir,
  mkpath,
  path,
  relativeFilePath,
  rmdir,
  rmpath,
  sorting,
  aRRAY,
  eQ,
  nE,
  QDirPtr (..),
  cd,
  cdUp,
  setFilter,
  makeAbsolute,
  setPath,
  refresh,
  remove,
  removeRecursively,
  rename,
  setSorting,
  swap,
  aSSIGN,
  addSearchPath,
  cleanPath,
  current,
  currentPath,
  fromNativeSeparators,
  home,
  homePath,
  isAbsolutePath,
  isRelativePath,
  match,
  root,
  rootPath,
  separator,
  setCurrent,
  temp,
  tempPath,
  toNativeSeparators,
  QDirConst (..),
  castQDirToConst,
  QDir (..),
  castQDirToNonconst,
  new,
  newCopy,
  QDirSuper (..),
  QDirSuperConst (..),
  QDirFilter (..),
  QDirFilters (..),
  IsQDirFilters (..),
  dirs,
  allDirs,
  files,
  drives,
  noSymLinks,
  noDotAndDotDot,
  noDot,
  noDotDot,
  allEntries,
  readable,
  writable,
  executable,
  modified,
  hidden,
  system,
  caseSensitive,
  QDirSortFlag (..),
  QDirSortFlags (..),
  IsQDirSortFlags (..),
  name,
  time,
  size,
  typ,
  unsorted,
  dirsFirst,
  dirsLast,
  reversed,
  ignoreCase,
  localeAware,
  ) where

import Control.Monad ((>=>))
import qualified Data.Bits as HoppyDB
import qualified Foreign as HoppyF
import qualified Foreign.C as HoppyFC
import qualified Foreign.Hoppy.Runtime as HoppyFHR
import qualified Graphics.UI.Qtah.Generated.Core.QChar as M10
import qualified Graphics.UI.Qtah.Generated.Core.QString as M54
import Prelude (($), (++), (.), (/=), (=<<), (==), (>>))
import qualified Prelude as HoppyP
import qualified Prelude as QtahP

foreign import ccall "genpop__QDir_new" new' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr QDir)
foreign import ccall "genpop__QDir_newCopy" newCopy' ::  HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr QDir)
foreign import ccall "genpop__QDir_absoluteFilePath" absoluteFilePath' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_absolutePath" absolutePath' ::  HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_addSearchPath" addSearchPath' ::  HoppyF.Ptr M54.QStringConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO ()
foreign import ccall "genpop__QDir_canonicalPath" canonicalPath' ::  HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_cd" cd' ::  HoppyF.Ptr QDir -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_cdUp" cdUp' ::  HoppyF.Ptr QDir -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_cleanPath" cleanPath' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_count" count' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QDir_current" current' ::  HoppyP.IO (HoppyF.Ptr QDirConst)
foreign import ccall "genpop__QDir_currentPath" currentPath' ::  HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_dirName" dirName' ::  HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_exists" exists' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_entryExists" entryExists' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_filePath" filePath' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_filter" filter' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QDir_setFilter" setFilter' ::  HoppyF.Ptr QDir -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QDir_fromNativeSeparators" fromNativeSeparators' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_home" home' ::  HoppyP.IO (HoppyF.Ptr QDirConst)
foreign import ccall "genpop__QDir_homePath" homePath' ::  HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_isAbsolute" isAbsolute' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_isAbsolutePath" isAbsolutePath' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_isReadable" isReadable' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_isRelative" isRelative' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_isRelativePath" isRelativePath' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_isRoot" isRoot' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_makeAbsolute" makeAbsolute' ::  HoppyF.Ptr QDir -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_match" match' ::  HoppyF.Ptr M54.QStringConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_mkdir" mkdir' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_mkpath" mkpath' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_path" path' ::  HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_setPath" setPath' ::  HoppyF.Ptr QDir -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO ()
foreign import ccall "genpop__QDir_refresh" refresh' ::  HoppyF.Ptr QDir -> HoppyP.IO ()
foreign import ccall "genpop__QDir_relativeFilePath" relativeFilePath' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_remove" remove' ::  HoppyF.Ptr QDir -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_removeRecursively" removeRecursively' ::  HoppyF.Ptr QDir -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_rename" rename' ::  HoppyF.Ptr QDir -> HoppyF.Ptr M54.QStringConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_rmdir" rmdir' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_rmpath" rmpath' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_root" root' ::  HoppyP.IO (HoppyF.Ptr QDirConst)
foreign import ccall "genpop__QDir_rootPath" rootPath' ::  HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_separator" separator' ::  HoppyP.IO (HoppyF.Ptr M10.QCharConst)
foreign import ccall "genpop__QDir_setCurrent" setCurrent' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_sorting" sorting' ::  HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QDir_setSorting" setSorting' ::  HoppyF.Ptr QDir -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QDir_swap" swap' ::  HoppyF.Ptr QDir -> HoppyF.Ptr QDir -> HoppyP.IO ()
foreign import ccall "genpop__QDir_temp" temp' ::  HoppyP.IO (HoppyF.Ptr QDirConst)
foreign import ccall "genpop__QDir_tempPath" tempPath' ::  HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_toNativeSeparators" toNativeSeparators' ::  HoppyF.Ptr M54.QStringConst -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_ARRAY" aRRAY' ::  HoppyF.Ptr QDirConst -> HoppyFC.CInt -> HoppyP.IO (HoppyF.Ptr M54.QStringConst)
foreign import ccall "genpop__QDir_EQ" eQ' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_NE" nE' ::  HoppyF.Ptr QDirConst -> HoppyF.Ptr QDirConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QDir_ASSIGN" aSSIGN' ::  HoppyF.Ptr QDir -> HoppyF.Ptr QDirConst -> HoppyP.IO (HoppyF.Ptr QDir)
foreign import ccall "gendel__QDir" delete'QDir :: HoppyF.Ptr QDirConst -> HoppyP.IO ()
foreign import ccall "&gendel__QDir" deletePtr'QDir :: HoppyF.FunPtr (HoppyF.Ptr QDirConst -> HoppyP.IO ())

class QDirValue a where
  withQDirPtr :: a -> (QDirConst -> HoppyP.IO b) -> HoppyP.IO b

instance {-# OVERLAPPABLE #-} QDirConstPtr a => QDirValue a where
  withQDirPtr = HoppyP.flip ($) . toQDirConst

class (HoppyFHR.CppPtr this) => QDirConstPtr this where
  toQDirConst :: this -> QDirConst

absoluteFilePath :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QtahP.String
absoluteFilePath arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (absoluteFilePath' arg'1' arg'2')

absolutePath :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
absolutePath arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (absolutePath' arg'1')

canonicalPath :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
canonicalPath arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (canonicalPath' arg'1')

count :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Int
count arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap HoppyFHR.coerceIntegral
  (count' arg'1')

dirName :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
dirName arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (dirName' arg'1')

exists :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
exists arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (exists' arg'1')

entryExists :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
entryExists arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (entryExists' arg'1' arg'2')

filePath :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QtahP.String
filePath arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (filePath' arg'1' arg'2')

filter :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QDirFilters
filter arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QDirFilters
  (filter' arg'1')

isAbsolute :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isAbsolute arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isAbsolute' arg'1')

isReadable :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isReadable arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isReadable' arg'1')

isRelative :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isRelative arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isRelative' arg'1')

isRoot :: (QDirValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isRoot arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isRoot' arg'1')

mkdir :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
mkdir arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (mkdir' arg'1' arg'2')

mkpath :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
mkpath arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (mkpath' arg'1' arg'2')

path :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
path arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (path' arg'1')

relativeFilePath :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QtahP.String
relativeFilePath arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (relativeFilePath' arg'1' arg'2')

rmdir :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
rmdir arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (rmdir' arg'1' arg'2')

rmpath :: (QDirValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
rmpath arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (rmpath' arg'1' arg'2')

sorting :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QDirSortFlags
sorting arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QDirSortFlags
  (sorting' arg'1')

aRRAY :: (QDirValue arg'1) => arg'1 -> HoppyP.Int -> HoppyP.IO QtahP.String
aRRAY arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  let arg'2' = HoppyFHR.coerceIntegral arg'2 in
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (aRRAY' arg'1' arg'2')

eQ :: (QDirValue arg'1, QDirValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
eQ arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQDirPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (eQ' arg'1' arg'2')

nE :: (QDirValue arg'1, QDirValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
nE arg'1 arg'2 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQDirPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (nE' arg'1' arg'2')

class (QDirConstPtr this) => QDirPtr this where
  toQDir :: this -> QDir

cd :: (QDirPtr arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
cd arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (cd' arg'1' arg'2')

cdUp :: (QDirPtr arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
cdUp arg'1 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (cdUp' arg'1')

setFilter :: (QDirPtr arg'1, IsQDirFilters arg'2) => arg'1 -> arg'2 -> HoppyP.IO ()
setFilter arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  let arg'2' = fromQDirFilters $ toQDirFilters arg'2 in
  (setFilter' arg'1' arg'2')

makeAbsolute :: (QDirPtr arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
makeAbsolute arg'1 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (makeAbsolute' arg'1')

setPath :: (QDirPtr arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO ()
setPath arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (setPath' arg'1' arg'2')

refresh :: (QDirPtr arg'1) => arg'1 -> HoppyP.IO ()
refresh arg'1 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  (refresh' arg'1')

remove :: (QDirPtr arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
remove arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (remove' arg'1' arg'2')

removeRecursively :: (QDirPtr arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
removeRecursively arg'1 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (removeRecursively' arg'1')

rename :: (QDirPtr arg'1, M54.QStringValue arg'2, M54.QStringValue arg'3) => arg'1 -> arg'2 -> arg'3 -> HoppyP.IO HoppyP.Bool
rename arg'1 arg'2 arg'3 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  M54.withQStringPtr arg'3 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'3' ->
  HoppyP.fmap (/= 0)
  (rename' arg'1' arg'2' arg'3')

setSorting :: (QDirPtr arg'1, IsQDirSortFlags arg'2) => arg'1 -> arg'2 -> HoppyP.IO ()
setSorting arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  let arg'2' = fromQDirSortFlags $ toQDirSortFlags arg'2 in
  (setSorting' arg'1' arg'2')

swap :: (QDirPtr arg'1, QDirPtr arg'2) => arg'1 -> arg'2 -> HoppyP.IO ()
swap arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  HoppyFHR.withCppPtr (toQDir arg'2) $ \arg'2' ->
  (swap' arg'1' arg'2')

aSSIGN :: (QDirPtr arg'1, QDirValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QDir
aSSIGN arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQDir arg'1) $ \arg'1' ->
  withQDirPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap QDir
  (aSSIGN' arg'1' arg'2')

addSearchPath :: (M54.QStringValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO ()
addSearchPath arg'1 arg'2 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (addSearchPath' arg'1' arg'2')

cleanPath :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
cleanPath arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (cleanPath' arg'1')

current ::  HoppyP.IO QDir
current =
  (HoppyFHR.decodeAndDelete . QDirConst) =<<
  (current')

currentPath ::  HoppyP.IO QtahP.String
currentPath =
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (currentPath')

fromNativeSeparators :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
fromNativeSeparators arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (fromNativeSeparators' arg'1')

home ::  HoppyP.IO QDir
home =
  (HoppyFHR.decodeAndDelete . QDirConst) =<<
  (home')

homePath ::  HoppyP.IO QtahP.String
homePath =
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (homePath')

isAbsolutePath :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isAbsolutePath arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isAbsolutePath' arg'1')

isRelativePath :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isRelativePath arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isRelativePath' arg'1')

match :: (M54.QStringValue arg'1, M54.QStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
match arg'1 arg'2 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  M54.withQStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (match' arg'1' arg'2')

root ::  HoppyP.IO QDir
root =
  (HoppyFHR.decodeAndDelete . QDirConst) =<<
  (root')

rootPath ::  HoppyP.IO QtahP.String
rootPath =
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (rootPath')

separator ::  HoppyP.IO QtahP.Char
separator =
  (HoppyFHR.decodeAndDelete . M10.QCharConst) =<<
  (separator')

setCurrent :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
setCurrent arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (setCurrent' arg'1')

temp ::  HoppyP.IO QDir
temp =
  (HoppyFHR.decodeAndDelete . QDirConst) =<<
  (temp')

tempPath ::  HoppyP.IO QtahP.String
tempPath =
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (tempPath')

toNativeSeparators :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO QtahP.String
toNativeSeparators arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M54.QStringConst) =<<
  (toNativeSeparators' arg'1')

data QDirConst =
    QDirConst (HoppyF.Ptr QDirConst)
  | QDirConstGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QDirConst)
  deriving (HoppyP.Show)

instance HoppyP.Eq QDirConst where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QDirConst where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQDirToConst :: QDir -> QDirConst
castQDirToConst (QDir ptr') = QDirConst $ HoppyF.castPtr ptr'
castQDirToConst (QDirGc fptr' ptr') = QDirConstGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QDirConst where
  nullptr = QDirConst HoppyF.nullPtr

  withCppPtr (QDirConst ptr') f' = f' ptr'
  withCppPtr (QDirConstGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'

  toPtr (QDirConst ptr') = ptr'
  toPtr (QDirConstGc _ ptr') = ptr'

  touchCppPtr (QDirConst _) = HoppyP.return ()
  touchCppPtr (QDirConstGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QDirConst where
  delete (QDirConst ptr') = delete'QDir ptr'
  delete (QDirConstGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QDirConst", " object."]

  toGc this'@(QDirConst ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QDirConstGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QDir :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QDirConstGc {}) = HoppyP.return this'

instance HoppyFHR.Copyable QDirConst QDir where copy = newCopy

instance QDirConstPtr QDirConst where
  toQDirConst = HoppyP.id

data QDir =
    QDir (HoppyF.Ptr QDir)
  | QDirGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QDir)
  deriving (HoppyP.Show)

instance HoppyP.Eq QDir where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QDir where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQDirToNonconst :: QDirConst -> QDir
castQDirToNonconst (QDirConst ptr') = QDir $ HoppyF.castPtr ptr'
castQDirToNonconst (QDirConstGc fptr' ptr') = QDirGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QDir where
  nullptr = QDir HoppyF.nullPtr

  withCppPtr (QDir ptr') f' = f' ptr'
  withCppPtr (QDirGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'

  toPtr (QDir ptr') = ptr'
  toPtr (QDirGc _ ptr') = ptr'

  touchCppPtr (QDir _) = HoppyP.return ()
  touchCppPtr (QDirGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QDir where
  delete (QDir ptr') = delete'QDir $ (HoppyF.castPtr ptr' :: HoppyF.Ptr QDirConst)
  delete (QDirGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QDir", " object."]

  toGc this'@(QDir ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QDirGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QDir :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QDirGc {}) = HoppyP.return this'

instance HoppyFHR.Copyable QDir QDir where copy = newCopy

instance QDirConstPtr QDir where
  toQDirConst (QDir ptr') = QDirConst $ (HoppyF.castPtr :: HoppyF.Ptr QDir -> HoppyF.Ptr QDirConst) ptr'
  toQDirConst (QDirGc fptr' ptr') = QDirConstGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr QDir -> HoppyF.Ptr QDirConst) ptr'

instance QDirPtr QDir where
  toQDir = HoppyP.id

new :: (M54.QStringValue arg'1) => arg'1 -> HoppyP.IO QDir
new arg'1 =
  M54.withQStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QDir
  (new' arg'1')

newCopy :: (QDirValue arg'1) => arg'1 -> HoppyP.IO QDir
newCopy arg'1 =
  withQDirPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QDir
  (newCopy' arg'1')

class QDirSuper a where
  downToQDir :: a -> QDir


class QDirSuperConst a where
  downToQDirConst :: a -> QDirConst


instance HoppyFHR.Assignable (HoppyF.Ptr (HoppyF.Ptr QDir)) QDir where
  assign ptr' value' = HoppyF.poke ptr' $ HoppyFHR.toPtr value'

instance QDirValue a => HoppyFHR.Assignable QDir a where
  assign x' y' = aSSIGN x' y' >> HoppyP.return ()

instance HoppyFHR.Decodable (HoppyF.Ptr (HoppyF.Ptr QDir)) QDir where
  decode = HoppyP.fmap QDir . HoppyF.peek

instance HoppyFHR.Decodable QDir (QDir) where
  decode = HoppyFHR.decode . toQDirConst

instance HoppyFHR.Decodable QDirConst (QDir) where
  decode =
    HoppyFHR.copy >=> HoppyFHR.toGc

data QDirFilter =
  Dirs
  | AllDirs
  | Files
  | Drives
  | NoSymLinks
  | NoDotAndDotDot
  | NoDot
  | NoDotDot
  | AllEntries
  | Readable
  | Writable
  | Executable
  | Modified
  | Hidden
  | System
  | CaseSensitive
  deriving (HoppyP.Bounded, HoppyP.Eq, HoppyP.Ord, HoppyP.Show)

instance HoppyP.Enum QDirFilter where
  fromEnum Dirs = 1
  fromEnum AllDirs = 1024
  fromEnum Files = 2
  fromEnum Drives = 4
  fromEnum NoSymLinks = 8
  fromEnum NoDotAndDotDot = 24576
  fromEnum NoDot = 8192
  fromEnum NoDotDot = 16384
  fromEnum AllEntries = 7
  fromEnum Readable = 16
  fromEnum Writable = 32
  fromEnum Executable = 64
  fromEnum Modified = 128
  fromEnum Hidden = 256
  fromEnum System = 512
  fromEnum CaseSensitive = 2048

  toEnum (1) = Dirs
  toEnum (1024) = AllDirs
  toEnum (2) = Files
  toEnum (4) = Drives
  toEnum (8) = NoSymLinks
  toEnum (24576) = NoDotAndDotDot
  toEnum (8192) = NoDot
  toEnum (16384) = NoDotDot
  toEnum (7) = AllEntries
  toEnum (16) = Readable
  toEnum (32) = Writable
  toEnum (64) = Executable
  toEnum (128) = Modified
  toEnum (256) = Hidden
  toEnum (512) = System
  toEnum (2048) = CaseSensitive
  toEnum n' = HoppyP.error $ "Unknown QDirFilter numeric value: " ++ HoppyP.show n'

newtype QDirFilters = QDirFilters { fromQDirFilters :: HoppyFC.CInt }
  deriving (HoppyDB.Bits, HoppyP.Bounded, HoppyP.Eq, HoppyP.Ord, HoppyP.Show)

class IsQDirFilters a where
  toQDirFilters :: a -> QDirFilters

instance IsQDirFilters (HoppyFC.CInt) where
  toQDirFilters = QDirFilters
instance IsQDirFilters (HoppyP.Int) where
  toQDirFilters = QDirFilters . HoppyFHR.coerceIntegral
instance IsQDirFilters QDirFilters where
  toQDirFilters = HoppyP.id

instance IsQDirFilters QDirFilter where
  toQDirFilters = QDirFilters . HoppyFHR.coerceIntegral . HoppyP.fromEnum

dirs = QDirFilters (1)
allDirs = QDirFilters (1024)
files = QDirFilters (2)
drives = QDirFilters (4)
noSymLinks = QDirFilters (8)
noDotAndDotDot = QDirFilters (24576)
noDot = QDirFilters (8192)
noDotDot = QDirFilters (16384)
allEntries = QDirFilters (7)
readable = QDirFilters (16)
writable = QDirFilters (32)
executable = QDirFilters (64)
modified = QDirFilters (128)
hidden = QDirFilters (256)
system = QDirFilters (512)
caseSensitive = QDirFilters (2048)

data QDirSortFlag =
  Name
  | Time
  | Size
  | Typ
  | Unsorted
  | DirsFirst
  | DirsLast
  | Reversed
  | IgnoreCase
  | LocaleAware
  deriving (HoppyP.Bounded, HoppyP.Eq, HoppyP.Ord, HoppyP.Show)

instance HoppyP.Enum QDirSortFlag where
  fromEnum Name = 0
  fromEnum Time = 1
  fromEnum Size = 2
  fromEnum Typ = 128
  fromEnum Unsorted = 3
  fromEnum DirsFirst = 4
  fromEnum DirsLast = 32
  fromEnum Reversed = 8
  fromEnum IgnoreCase = 16
  fromEnum LocaleAware = 64

  toEnum (0) = Name
  toEnum (1) = Time
  toEnum (2) = Size
  toEnum (128) = Typ
  toEnum (3) = Unsorted
  toEnum (4) = DirsFirst
  toEnum (32) = DirsLast
  toEnum (8) = Reversed
  toEnum (16) = IgnoreCase
  toEnum (64) = LocaleAware
  toEnum n' = HoppyP.error $ "Unknown QDirSortFlag numeric value: " ++ HoppyP.show n'

newtype QDirSortFlags = QDirSortFlags { fromQDirSortFlags :: HoppyFC.CInt }
  deriving (HoppyDB.Bits, HoppyP.Bounded, HoppyP.Eq, HoppyP.Ord, HoppyP.Show)

class IsQDirSortFlags a where
  toQDirSortFlags :: a -> QDirSortFlags

instance IsQDirSortFlags (HoppyFC.CInt) where
  toQDirSortFlags = QDirSortFlags
instance IsQDirSortFlags (HoppyP.Int) where
  toQDirSortFlags = QDirSortFlags . HoppyFHR.coerceIntegral
instance IsQDirSortFlags QDirSortFlags where
  toQDirSortFlags = HoppyP.id

instance IsQDirSortFlags QDirSortFlag where
  toQDirSortFlags = QDirSortFlags . HoppyFHR.coerceIntegral . HoppyP.fromEnum

name = QDirSortFlags (0)
time = QDirSortFlags (1)
size = QDirSortFlags (2)
typ = QDirSortFlags (128)
unsorted = QDirSortFlags (3)
dirsFirst = QDirSortFlags (4)
dirsLast = QDirSortFlags (32)
reversed = QDirSortFlags (8)
ignoreCase = QDirSortFlags (16)
localeAware = QDirSortFlags (64)