This commit is contained in:
Julian Ospald 2020-01-29 20:21:01 +01:00
parent a5f3ab8139
commit 6d59131353
No known key found for this signature in database
GPG Key ID: 511B62C09D50CD28
1 changed files with 24 additions and 24 deletions

View File

@ -27,35 +27,35 @@ module Streamly.External.FileSystem.Handle.Posix
) )
where where
import Streamly import Control.Exception.Safe
import Streamly.Memory.Array
import qualified Streamly.FileSystem.Handle as FH
import qualified Streamly.Internal.Prelude as S
import System.IO ( Handle
, hClose
)
import Control.Monad.IO.Class ( liftIO import Control.Monad.IO.Class ( liftIO
, MonadIO , MonadIO
) )
import Data.Word ( Word8 ) import Data.Word ( Word8 )
import Data.Word8 import Data.Word8
import Control.Exception.Safe import Prelude hiding ( readFile )
import qualified Data.ByteString.Lazy as L import Streamly
import qualified Data.ByteString as BS
import qualified Streamly.External.ByteString as Strict
import qualified Data.ByteString.Lazy.Internal as BSLI
import System.IO.Unsafe
import qualified Streamly.Internal.Data.Unfold as SIU
import Streamly.Internal.Data.Unfold.Types import Streamly.Internal.Data.Unfold.Types
import System.Posix.RawFilePath.Directory.Traversals import Streamly.Memory.Array
hiding ( getDirectoryContents ) import System.IO ( Handle
import qualified Streamly.Internal.Data.Stream.StreamD.Type , hClose
as D )
import System.IO.Unsafe
import System.Posix.ByteString import System.Posix.ByteString
import System.Posix.Foreign ( DirType )
import System.Posix.Directory.ByteString import System.Posix.Directory.ByteString
as PosixBS as PosixBS
import Prelude hiding ( readFile ) import System.Posix.Foreign ( DirType )
import System.Posix.RawFilePath.Directory.Traversals
hiding ( getDirectoryContents )
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Internal as BSLI
import qualified Streamly.External.ByteString as Strict
import qualified Streamly.FileSystem.Handle as FH
import qualified Streamly.Internal.Data.Stream.StreamD.Type
as D
import qualified Streamly.Internal.Data.Unfold as SIU
import qualified Streamly.Internal.Prelude as S
-- |Read the given file lazily as a lazy ByteString. -- |Read the given file lazily as a lazy ByteString.
@ -82,7 +82,7 @@ readFileLBS handle' = fromChunks (readFileStream handle')
readFileStream :: (MonadCatch m, MonadAsync m) readFileStream :: (MonadCatch m, MonadAsync m)
=> Handle => Handle
-> SerialT m (Array Word8) -> SerialT m (Array Word8)
readFileStream = S.unfold (SIU.finallyIO (\h -> liftIO (putStrLn "close readFileStream") >> liftIO (hClose h)) FH.readChunks) readFileStream = S.unfold (SIU.finallyIO (liftIO . hClose) FH.readChunks)
-- | Like 'copyFileStream', except for two file handles. -- | Like 'copyFileStream', except for two file handles.
@ -102,7 +102,8 @@ copyFileStream :: (MonadCatch m, MonadAsync m, MonadMask m)
-> Handle -- ^ file handle to copy to, must be writable -> Handle -- ^ file handle to copy to, must be writable
-> m () -> m ()
copyFileStream stream handle' = copyFileStream stream handle' =
(flip finally) (liftIO $ hClose handle') $ S.fold (FH.writeChunks handle') stream (flip finally) (liftIO $ hClose handle')
$ S.fold (FH.writeChunks handle') stream
-- | Create an 'Unfold' of directory contents. -- | Create an 'Unfold' of directory contents.
@ -136,5 +137,4 @@ dirContentsStream =
dirContents :: (MonadCatch m, MonadAsync m, MonadMask m) dirContents :: (MonadCatch m, MonadAsync m, MonadMask m)
=> DirStream => DirStream
-> m [(DirType, RawFilePath)] -> m [(DirType, RawFilePath)]
dirContents = S.toList . S.unfold dirContents = S.toList . dirContentsStream
(SIU.finallyIO (liftIO . PosixBS.closeDirStream) unfoldDirContents)