{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DSV.FileFold
( foldDsvFileWithoutHeader, foldDsvFileWithoutHeaderM
, foldDsvFileIgnoringHeader, foldDsvFileIgnoringHeaderM
, foldDsvFileWithZippedHeader, foldDsvFileWithZippedHeaderM
) 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
import qualified Pipes.Safe.Prelude as P
foldDsvFileWithoutHeader ::
forall m result .
MonadIO m
=> Delimiter
-> FilePath
-> Fold (Vector ByteString) result
-> m (ParseStop, result)
foldDsvFileWithoutHeader d fp fld =
liftIO $ runSafeT $ P.withFile fp ReadMode $ \h -> lift $
foldProducer fld (handleDsvRowProducer d h)
foldDsvFileWithoutHeaderM ::
forall m result .
(MonadCatch m, MonadMask m, MonadIO m)
=> Delimiter
-> FilePath
-> FoldM m (Vector ByteString) result
-> m (ParseStop, result)
foldDsvFileWithoutHeaderM d fp fld =
runSafeT $ P.withFile fp ReadMode $ \h -> lift $
foldProducerM fld (handleDsvRowProducer d h)
foldDsvFileIgnoringHeader ::
forall m result .
MonadIO m
=> Delimiter
-> FilePath
-> Fold (Vector ByteString) result
-> m (ParseStop, result)
foldDsvFileIgnoringHeader d fp fld =
foldDsvFileWithoutHeader d fp (foldDrop 1 fld)
foldDsvFileIgnoringHeaderM ::
forall m result .
(MonadCatch m, MonadMask m, MonadIO m)
=> Delimiter
-> FilePath
-> FoldM m (Vector ByteString) result
-> m (ParseStop, result)
foldDsvFileIgnoringHeaderM d fp fld =
foldDsvFileWithoutHeaderM d fp (foldDropM 1 fld)
foldDsvFileWithZippedHeader ::
forall m result .
MonadIO m
=> Delimiter
-> FilePath
-> Fold (Vector (ByteString, ByteString)) result
-> m (ParseStop, result)
foldDsvFileWithZippedHeader d fp fld =
liftIO $ runSafeT $ P.withFile fp ReadMode $ \h -> lift $
foldProducer fld (handleDsvRowProducer d h >-> zipHeaderPipe)
foldDsvFileWithZippedHeaderM ::
forall m result .
(MonadCatch m, MonadMask m, MonadIO m)
=> Delimiter
-> FilePath
-> FoldM m (Vector (ByteString, ByteString)) result
-> m (ParseStop, result)
foldDsvFileWithZippedHeaderM d fp fld =
runSafeT $ P.withFile fp ReadMode $ \h -> lift $
foldProducerM fld (handleDsvRowProducer d h >-> zipHeaderPipe)