{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DSV.FileStrictRead
( readDsvFileStrictWithZippedHeader
, readDsvFileStrictWithoutHeader
, readDsvFileStrictIgnoringHeader
) where
import DSV.ByteString
import DSV.DelimiterType
import DSV.Fold
import DSV.Header
import DSV.IO
import DSV.ParseStop
import DSV.Parsing
import DSV.Pipes
import DSV.Prelude
import DSV.Vector
readDsvFileStrictWithoutHeader ::
forall m .
MonadIO m
=> Delimiter
-> FilePath
-> m (ParseStop, Vector (Vector ByteString))
Delimiter
d FilePath
fp =
IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString)))
-> IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$ SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString))
forall (m :: * -> *) r.
(MonadMask m, MonadIO m) =>
SafeT m r -> m r
runSafeT (SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString)))
-> SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$
do
FoldM (SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
-> Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString))
forall a b (m :: * -> *) r.
Monad m =>
FoldM m a b -> Producer a m r -> m (r, b)
foldProducerM FoldM (SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
forall (v :: * -> *) (m :: * -> *) a.
(PrimMonad m, Vector v a) =>
FoldM m a (v a)
foldVectorM (Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString)))
-> Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$
FilePath
-> IOMode
-> (Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop
forall (m :: * -> *) r.
MonadSafe m =>
FilePath -> IOMode -> (Handle -> m r) -> m r
withFile FilePath
fp IOMode
ReadMode ((Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> (Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop
forall a b. (a -> b) -> a -> b
$ \Handle
h ->
Delimiter
-> Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop
forall (m :: * -> *).
MonadIO m =>
Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer Delimiter
d Handle
h
readDsvFileStrictWithZippedHeader ::
forall m .
MonadIO m
=> Delimiter
-> FilePath
-> m (ParseStop, Vector (Vector (ByteString, ByteString)))
Delimiter
d FilePath
fp =
IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> m (ParseStop, Vector (Vector (ByteString, ByteString)))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> m (ParseStop, Vector (Vector (ByteString, ByteString))))
-> IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> m (ParseStop, Vector (Vector (ByteString, ByteString)))
forall a b. (a -> b) -> a -> b
$ SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> IO (ParseStop, Vector (Vector (ByteString, ByteString)))
forall (m :: * -> *) r.
(MonadMask m, MonadIO m) =>
SafeT m r -> m r
runSafeT (SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> IO (ParseStop, Vector (Vector (ByteString, ByteString))))
-> SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString)))
-> IO (ParseStop, Vector (Vector (ByteString, ByteString)))
forall a b. (a -> b) -> a -> b
$
do
FoldM
(SafeT IO)
(Vector (ByteString, ByteString))
(Vector (Vector (ByteString, ByteString)))
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString)))
forall a b (m :: * -> *) r.
Monad m =>
FoldM m a b -> Producer a m r -> m (r, b)
foldProducerM FoldM
(SafeT IO)
(Vector (ByteString, ByteString))
(Vector (Vector (ByteString, ByteString)))
forall (v :: * -> *) (m :: * -> *) a.
(PrimMonad m, Vector v a) =>
FoldM m a (v a)
foldVectorM (Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString))))
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector (ByteString, ByteString)))
forall a b. (a -> b) -> a -> b
$
FilePath
-> IOMode
-> (Handle
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop)
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
forall (m :: * -> *) r.
MonadSafe m =>
FilePath -> IOMode -> (Handle -> m r) -> m r
withFile FilePath
fp IOMode
ReadMode ((Handle
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop)
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop)
-> (Handle
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop)
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
forall a b. (a -> b) -> a -> b
$ \Handle
h ->
Delimiter
-> Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop
forall (m :: * -> *).
MonadIO m =>
Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer Delimiter
d Handle
h Producer (Vector ByteString) (SafeT IO) ParseStop
-> Proxy
()
(Vector ByteString)
()
(Vector (ByteString, ByteString))
(SafeT IO)
ParseStop
-> Producer (Vector (ByteString, ByteString)) (SafeT IO) ParseStop
forall (m :: * -> *) a' a b r c' c.
Monad m =>
Proxy a' a () b m r -> Proxy () b c' c m r -> Proxy a' a c' c m r
>-> Proxy
()
(Vector ByteString)
()
(Vector (ByteString, ByteString))
(SafeT IO)
ParseStop
forall a (m :: * -> *) r.
Monad m =>
Pipe (Vector a) (Vector (a, a)) m r
zipHeaderPipe
readDsvFileStrictIgnoringHeader ::
forall m .
MonadIO m
=> Delimiter
-> FilePath
-> m (ParseStop, Vector (Vector ByteString))
Delimiter
d FilePath
fp =
IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString)))
-> IO (ParseStop, Vector (Vector ByteString))
-> m (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$ SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString))
forall (m :: * -> *) r.
(MonadMask m, MonadIO m) =>
SafeT m r -> m r
runSafeT (SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString)))
-> SafeT IO (ParseStop, Vector (Vector ByteString))
-> IO (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$
do
FoldM (SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
-> Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString))
forall a b (m :: * -> *) r.
Monad m =>
FoldM m a b -> Producer a m r -> m (r, b)
foldProducerM (Natural
-> FoldM
(SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
-> FoldM
(SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
forall (m :: * -> *) a b.
Monad m =>
Natural -> FoldM m a b -> FoldM m a b
foldDropM Natural
1 FoldM (SafeT IO) (Vector ByteString) (Vector (Vector ByteString))
forall (v :: * -> *) (m :: * -> *) a.
(PrimMonad m, Vector v a) =>
FoldM m a (v a)
foldVectorM) (Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString)))
-> Producer (Vector ByteString) (SafeT IO) ParseStop
-> SafeT IO (ParseStop, Vector (Vector ByteString))
forall a b. (a -> b) -> a -> b
$
FilePath
-> IOMode
-> (Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop
forall (m :: * -> *) r.
MonadSafe m =>
FilePath -> IOMode -> (Handle -> m r) -> m r
withFile FilePath
fp IOMode
ReadMode ((Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> (Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop)
-> Producer (Vector ByteString) (SafeT IO) ParseStop
forall a b. (a -> b) -> a -> b
$ \Handle
h ->
Delimiter
-> Handle -> Producer (Vector ByteString) (SafeT IO) ParseStop
forall (m :: * -> *).
MonadIO m =>
Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer Delimiter
d Handle
h