Use ghc implementation of createDirectoryIfMissing and
removeDirectoryRecursive for nhc98 and Hugs too.
import System.Environment ( getEnv )
import System.FilePath
import System.IO.Error
import System.Environment ( getEnv )
import System.FilePath
import System.IO.Error
+import Control.Monad ( when, unless )
#ifdef __NHC__
import Directory
#ifdef __NHC__
import Directory
import Prelude
import Control.Exception ( bracket )
import Prelude
import Control.Exception ( bracket )
-import Control.Monad ( when, unless )
import System.Posix.Types
import System.Posix.Internals
import System.Time ( ClockTime(..) )
import System.Posix.Types
import System.Posix.Internals
import System.Time ( ClockTime(..) )
withCString path $ \s -> do
throwErrnoIfMinus1Retry_ "createDirectory" $
mkdir s 0o777
withCString path $ \s -> do
throwErrnoIfMinus1Retry_ "createDirectory" $
mkdir s 0o777
-- | @'createDirectoryIfMissing' parents dir@ creates a new directory
-- @dir@ if it doesn\'t exist. If the first argument is 'True'
-- | @'createDirectoryIfMissing' parents dir@ creates a new directory
-- @dir@ if it doesn\'t exist. If the first argument is 'True'
(_, True, _) -> mapM_ (createDirectoryIfMissing False) (tail (pathParents file))
(_, False, _) -> createDirectory file
(_, True, _) -> mapM_ (createDirectoryIfMissing False) (tail (pathParents file))
(_, False, _) -> createDirectory file
{- | @'removeDirectory' dir@ removes an existing directory /dir/. The
implementation may specify additional constraints which must be
satisfied before a directory can be removed (e.g. the directory has to
{- | @'removeDirectory' dir@ removes an existing directory /dir/. The
implementation may specify additional constraints which must be
satisfied before a directory can be removed (e.g. the directory has to
modifyIOError (`ioeSetFileName` path) $
withCString path $ \s ->
throwErrnoIfMinus1Retry_ "removeDirectory" (c_rmdir s)
modifyIOError (`ioeSetFileName` path) $
withCString path $ \s ->
throwErrnoIfMinus1Retry_ "removeDirectory" (c_rmdir s)
-- | @'removeDirectoryRecursive' dir@ removes an existing directory /dir/
-- together with its content and all subdirectories. Be careful,
-- | @'removeDirectoryRecursive' dir@ removes an existing directory /dir/
-- together with its content and all subdirectories. Be careful,
removeDirectoryRecursive f
Right _ -> return ()
removeDirectoryRecursive f
Right _ -> return ()
{- |'removeFile' /file/ removes the directory entry for an existing file
/file/, where /file/ is not itself a directory. The
implementation may specify additional constraints which must be
{- |'removeFile' /file/ removes the directory entry for an existing file
/file/, where /file/ is not itself a directory. The
implementation may specify additional constraints which must be