From 3d3da401b8f0a8d969a869a5376095298876d9dc Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Fri, 5 Mar 2010 21:19:53 +0000 Subject: [PATCH] FileManip: migrated to extenible-exceptions --- FileManip.cabal | 8 ++++++-- System/FilePath/Error.hs | 42 ++++++++++++++++++++++++++++++++++++++++ System/FilePath/Find.hs | 2 +- System/FilePath/Glob.hs | 3 ++- System/FilePath/Manip.hs | 3 ++- 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 System/FilePath/Error.hs diff --git a/FileManip.cabal b/FileManip.cabal index 5cbb979..ea7edb6 100644 --- a/FileManip.cabal +++ b/FileManip.cabal @@ -10,6 +10,8 @@ Description: A Haskell library for working with files and directories. Includes code for pattern matching, finding files, modifying file contents, and more. Cabal-version: >= 1.2 +Build-type: Simple + Extra-Source-Files: README Flag splitBase @@ -17,9 +19,9 @@ Flag splitBase Library if flag(splitBase) - Build-Depends: base, bytestring, directory, filepath, mtl, unix + Build-Depends: base >= 2 && < 5, bytestring, directory, filepath, mtl, unix, extensible-exceptions else - Build-Depends: base, filepath, mtl, unix + Build-Depends: base >= 2 && < 5, filepath, mtl, unix, extensible-exceptions GHC-Options: -Wall -O2 Exposed-Modules: @@ -27,3 +29,5 @@ Library System.FilePath.Glob, System.FilePath.GlobPattern, System.FilePath.Manip + Other-Modules: + System.FilePath.Error diff --git a/System/FilePath/Error.hs b/System/FilePath/Error.hs new file mode 100644 index 0000000..aabce41 --- /dev/null +++ b/System/FilePath/Error.hs @@ -0,0 +1,42 @@ +{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-} + +-- | +-- Module: System.FilePath.Manip +-- Copyright: Sergei Trofimovich +-- License: BSD3 +-- Maintainer: Bryan O'Sullivan +-- Stability: unstable +-- Portability: Unix-like systems (requires flexible instances) + +module System.FilePath.Error + ( + bracket + , bracket_ + , catch + , handle + , throwIO + , Exception + ) where + +import qualified Control.Exception.Extensible as EE +import Prelude hiding (catch) + +-- we can catch any exceptions if we need to +-- type Exception = SomeException +type Exception = EE.IOException + +-- we just pin down 'EE.Exception e' to local Exception +bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c +bracket = EE.bracket + +bracket_ :: IO a -> IO b -> IO c -> IO c +bracket_ = EE.bracket_ + +catch :: IO a -> (Exception -> IO a) -> IO a +catch = EE.catch + +handle :: (Exception -> IO a) -> IO a -> IO a +handle = EE.handle + +throwIO :: (EE.Exception e) => e -> IO a +throwIO = EE.throwIO diff --git a/System/FilePath/Find.hs b/System/FilePath/Find.hs index eb8d6b5..73aa90c 100644 --- a/System/FilePath/Find.hs +++ b/System/FilePath/Find.hs @@ -119,7 +119,7 @@ import System.FilePath ((), takeDirectory, takeExtension, takeFileName) import System.FilePath.GlobPattern (GlobPattern, (~~), (/~)) import System.IO (hPutStrLn, stderr) import System.IO.Unsafe (unsafeInterleaveIO, unsafePerformIO) -import qualified Control.Exception as E +import qualified System.FilePath.Error as E import qualified System.Posix.Files as F import qualified System.Posix.Types as T diff --git a/System/FilePath/Glob.hs b/System/FilePath/Glob.hs index e44b368..0164608 100644 --- a/System/FilePath/Glob.hs +++ b/System/FilePath/Glob.hs @@ -10,7 +10,6 @@ module System.FilePath.Glob ( namesMatching ) where -import Control.Exception (handle) import Control.Monad (forM) import System.FilePath.GlobPattern ((~~)) import System.Directory (doesDirectoryExist, doesFileExist, @@ -18,6 +17,8 @@ import System.Directory (doesDirectoryExist, doesFileExist, import System.FilePath (dropTrailingPathSeparator, splitFileName, ()) import System.IO.Unsafe (unsafeInterleaveIO) +import System.FilePath.Error (handle) + -- | Return a list of names matching a glob pattern. The list is -- generated lazily. namesMatching :: String -> IO [FilePath] diff --git a/System/FilePath/Manip.hs b/System/FilePath/Manip.hs index 3b4a26a..2dad4a9 100644 --- a/System/FilePath/Manip.hs +++ b/System/FilePath/Manip.hs @@ -16,7 +16,8 @@ module System.FilePath.Manip ( , modifyInPlace ) where -import Control.Exception (bracket, bracket_, handle, throwIO) +import System.FilePath.Error (bracket, bracket_, handle, throwIO) + import Control.Monad (liftM) import Data.Bits ((.&.)) import System.Directory (removeFile)