dsv-1.0.0.0: library/DSV/FileFold.hs
{-# 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
-- pipes-safe
import qualified Pipes.Safe.Prelude as P
foldDsvFileWithoutHeader ::
forall m result .
MonadIO m
=> Delimiter
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> Fold (Vector ByteString) result
-- ^ What to do with each row
-> 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
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> FoldM m (Vector ByteString) result
-- ^ What to do with each row
-> 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
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> Fold (Vector ByteString) result
-- ^ What to do with each row
-> m (ParseStop, result)
foldDsvFileIgnoringHeader d fp fld =
foldDsvFileWithoutHeader d fp (foldDrop 1 fld)
foldDsvFileIgnoringHeaderM ::
forall m result .
(MonadCatch m, MonadMask m, MonadIO m)
=> Delimiter
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> FoldM m (Vector ByteString) result
-- ^ What to do with each row
-> m (ParseStop, result)
foldDsvFileIgnoringHeaderM d fp fld =
foldDsvFileWithoutHeaderM d fp (foldDropM 1 fld)
foldDsvFileWithZippedHeader ::
forall m result .
MonadIO m
=> Delimiter
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> Fold (Vector (ByteString, ByteString)) result
-- ^ What to do with each row
-> 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
-- ^ What character separates input values, e.g. 'comma' or 'tab'
-> FilePath
-- ^ The path of a DSV file to read
-> FoldM m (Vector (ByteString, ByteString)) result
-- ^ What to do with each row
-> m (ParseStop, result)
foldDsvFileWithZippedHeaderM d fp fld =
runSafeT $ P.withFile fp ReadMode $ \h -> lift $
foldProducerM fld (handleDsvRowProducer d h >-> zipHeaderPipe)