{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}

module DSV.FileStrictCsvMap
  ( mapCsvFileStrictWithoutHeader
  , mapCsvFileStrictIgnoringHeader
  , mapCsvFileStrictUsingHeader
  ) where

import DSV.ByteString
import DSV.CommonDelimiters
import DSV.FileStrictMap
import DSV.IO
import DSV.ParseStop
import DSV.Prelude
import DSV.Vector

mapCsvFileStrictWithoutHeader ::
    forall m row .
    MonadIO m
    => FilePath
        -- ^ The path of a CSV file to read
    -> (Vector ByteString -> IO row)
        -- ^ Conversion function by which you specify how to interpret one row of bytes from the CSV file
    -> m (ParseStop, Vector row)

mapCsvFileStrictWithoutHeader :: FilePath
-> (Vector ByteString -> IO row) -> m (ParseStop, Vector row)
mapCsvFileStrictWithoutHeader FilePath
fp Vector ByteString -> IO row
f =
    Delimiter
-> FilePath
-> (Vector ByteString -> IO row)
-> m (ParseStop, Vector row)
forall (m :: * -> *) row.
MonadIO m =>
Delimiter
-> FilePath
-> (Vector ByteString -> IO row)
-> m (ParseStop, Vector row)
mapDsvFileStrictWithoutHeader Delimiter
comma FilePath
fp Vector ByteString -> IO row
f

mapCsvFileStrictIgnoringHeader ::
    forall m row .
    MonadIO m
    => FilePath
        -- ^ The path of a CSV file to read
    -> (Vector ByteString -> IO row)
        -- ^ Conversion function by which you specify how to interpret one row of bytes from the CSV file
    -> m (ParseStop, Vector row)

mapCsvFileStrictIgnoringHeader :: FilePath
-> (Vector ByteString -> IO row) -> m (ParseStop, Vector row)
mapCsvFileStrictIgnoringHeader FilePath
fp Vector ByteString -> IO row
f =
    Delimiter
-> FilePath
-> (Vector ByteString -> IO row)
-> m (ParseStop, Vector row)
forall (m :: * -> *) row.
MonadIO m =>
Delimiter
-> FilePath
-> (Vector ByteString -> IO row)
-> m (ParseStop, Vector row)
mapDsvFileStrictIgnoringHeader Delimiter
comma FilePath
fp Vector ByteString -> IO row
f

mapCsvFileStrictUsingHeader ::
    forall m row .
    MonadIO m
    => FilePath
        -- ^ The path of a CSV file to read
    -> (Vector ByteString -> IO (Vector ByteString -> IO row))
        -- ^ Function which interprets the header (the first @Vector ByteString@) and returns a conversion function (@Vector ByteString -> IO row@) by which you specify how to interpret one row of bytes from the CSV file
    -> m (ParseStop, Vector row)

mapCsvFileStrictUsingHeader :: FilePath
-> (Vector ByteString -> IO (Vector ByteString -> IO row))
-> m (ParseStop, Vector row)
mapCsvFileStrictUsingHeader FilePath
fp Vector ByteString -> IO (Vector ByteString -> IO row)
f =
    Delimiter
-> FilePath
-> (Vector ByteString -> IO (Vector ByteString -> IO row))
-> m (ParseStop, Vector row)
forall (m :: * -> *) row.
MonadIO m =>
Delimiter
-> FilePath
-> (Vector ByteString -> IO (Vector ByteString -> IO row))
-> m (ParseStop, Vector row)
mapDsvFileStrictUsingHeader Delimiter
comma FilePath
fp Vector ByteString -> IO (Vector ByteString -> IO row)
f