pipes-csv-1.4.3: Fast, streaming csv parser

Safe HaskellNone
LanguageHaskell2010

Pipes.Csv

Contents

Description

This module allows constant-space CSV parsing.

It feeds ByteStrings into cassavas incremental CSV parser to attain true constant-space record streaming.

Synopsis

Example

Heres a simple example that reads from stdin and writes to a file

    import Pipes.Safe (runSafeT)
    import qualified Pipes.Safe.Prelude  as PS
    import qualified Pipes.ByteString    as PB
    import Data.Vector (fromList)
    import System.IO (IOMode(WriteMode))

    data Person = Person String Int
                deriving (Show)

    instance FromNamedRecord Person where
      parseNamedRecord p =
        Person <$> p .: "name"
               <*> p .: "age"

    personRec ~(Person name age) = ["name" .= name, "age" .= age]

    instance ToNamedRecord Person where
      toNamedRecord = namedRecord . personRec

    persons :: Monad m => Producer ByteString m () -> Producer Person m ()
    persons p = decodeByName p >-> right

    -- note: right can be replaced with Pipes.Prelude.concat in ghc-7.8,
    --       thanks to a Foldable instance for Either
    right :: (Monad m) => Pipe (Either a b) b m r
    right = loop
      where
        loop = await >>= s -> case s of
          Left _  -> loop
          Right v -> yield v >> loop

    write f = PS.withFile f WriteMode PB.toHandle

    main = runSafeT $ runEffect $ pipeline
      where
        header = fromList $ map fst $ personRec undefined
        pipeline = persons stdin
               >-> right
               >-> encodeByName header
               >-> write "persons_out.csv"

Decode records

decodeWith :: (Monad m, FromRecord a) => DecodeOptions -> HasHeader -> Producer ByteString m () -> Producer (Either String a) m () #

Create a Producer that takes a ByteString Producer as input, producing either errors or FromRecords.

Decode named records

decodeByNameWith :: (Monad m, FromNamedRecord a) => DecodeOptions -> Producer ByteString m () -> Producer (Either String a) m () #

Create a Producer that takes a ByteString Producer as input, producing either errors or FromNamedRecords.

Decode parsed records

feedParser :: Monad m => Parser a -> Producer ByteString m () -> Producer (Either String a) m () #

Create a Record Producer by feeding ByteStrings into a Parser

feedHeaderParser :: Monad m => HeaderParser (Parser a) -> Producer ByteString m () -> Producer (Either String a) m () #

Create a NamedRecord Producer by feeding ByteStrings into a Parser

Encode records

encode :: (Monad m, ToRecord a) => Pipe a ByteString m r #

Encode records as strict ByteStrings

encodeWith :: (Monad m, ToRecord a) => EncodeOptions -> Pipe a ByteString m r #

Encode records as strict ByteStrings

Encode named records

encodeByName :: (Monad m, ToNamedRecord a) => Header -> Pipe a ByteString m r #

Encode named records as strict ByteStrings

encodeByNameWith :: (Monad m, ToNamedRecord a) => EncodeOptions -> Header -> Pipe a ByteString m r #

Encode named records as strict ByteStrings

Re-exports

defaultEncodeOptions :: EncodeOptions #

Encoding options for CSV files.

data EncodeOptions #

Options that controls how data is encoded. These options can be used to e.g. encode data in a tab-separated format instead of in a comma-separated format.

To avoid having your program stop compiling when new fields are added to EncodeOptions, create option records by overriding values in defaultEncodeOptions. Example:

myOptions = defaultEncodeOptions {
      encDelimiter = fromIntegral (ord '\t')
    }

N.B. The encDelimiter must not be the quote character (i.e. ") or one of the record separator characters (i.e. \n or \r).

Instances
Eq EncodeOptions 
Instance details

Defined in Data.Csv.Encoding

Show EncodeOptions 
Instance details

Defined in Data.Csv.Encoding

(.=) :: ToField a => ByteString -> a -> (ByteString, ByteString) #

Alias for namedField.

(.:) :: FromField a => NamedRecord -> ByteString -> Parser a #

Alias for lookup.

(.!) :: FromField a => Record -> Int -> Parser a infixl 9 #

Alias for index.

class FromRecord a where #

A type that can be converted from a single CSV record, with the possibility of failure.

When writing an instance, use empty, mzero, or fail to make a conversion fail, e.g. if a Record has the wrong number of columns.

Given this example data:

John,56
Jane,55

here's an example type and instance:

data Person = Person { name :: !Text, age :: !Int }

instance FromRecord Person where
    parseRecord v
        | length v == 2 = Person <$>
                          v .! 0 <*>
                          v .! 1
        | otherwise     = mzero

Methods

parseRecord :: Record -> Parser a #

Instances
FromField a => FromRecord [a] 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser [a] #

FromField a => FromRecord (Only a) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (Only a) #

(FromField a, Unbox a) => FromRecord (Vector a) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (Vector a) #

FromField a => FromRecord (Vector a) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (Vector a) #

(FromField a, FromField b) => FromRecord (a, b) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b) #

(FromField a, FromField b, FromField c) => FromRecord (a, b, c) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c) #

(FromField a, FromField b, FromField c, FromField d) => FromRecord (a, b, c, d) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d) #

(FromField a, FromField b, FromField c, FromField d, FromField e) => FromRecord (a, b, c, d, e) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f) => FromRecord (a, b, c, d, e, f) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g) => FromRecord (a, b, c, d, e, f, g) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h) => FromRecord (a, b, c, d, e, f, g, h) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i) => FromRecord (a, b, c, d, e, f, g, h, i) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j) => FromRecord (a, b, c, d, e, f, g, h, i, j) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k) => FromRecord (a, b, c, d, e, f, g, h, i, j, k) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j, k) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l) => FromRecord (a, b, c, d, e, f, g, h, i, j, k, l) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j, k, l) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m) => FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n) => FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n) #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o) => FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) 
Instance details

Defined in Data.Csv.Conversion

Methods

parseRecord :: Record -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) #

class ToRecord a where #

A type that can be converted to a single CSV record.

An example type and instance:

data Person = Person { name :: !Text, age :: !Int }

instance ToRecord Person where
    toRecord (Person name age) = record [
        toField name, toField age]

Outputs data on this form:

John,56
Jane,55

Methods

toRecord :: a -> Record #

Convert a value to a record.

Instances
ToField a => ToRecord [a] 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: [a] -> Record #

ToField a => ToRecord (Only a) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: Only a -> Record #

(ToField a, Unbox a) => ToRecord (Vector a) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: Vector a -> Record #

ToField a => ToRecord (Vector a) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: Vector a -> Record #

(ToField a, ToField b) => ToRecord (a, b) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b) -> Record #

(ToField a, ToField b, ToField c) => ToRecord (a, b, c) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c) -> Record #

(ToField a, ToField b, ToField c, ToField d) => ToRecord (a, b, c, d) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e) => ToRecord (a, b, c, d, e) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f) => ToRecord (a, b, c, d, e, f) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g) => ToRecord (a, b, c, d, e, f, g) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h) => ToRecord (a, b, c, d, e, f, g, h) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i) => ToRecord (a, b, c, d, e, f, g, h, i) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j) => ToRecord (a, b, c, d, e, f, g, h, i, j) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j, ToField k) => ToRecord (a, b, c, d, e, f, g, h, i, j, k) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j, k) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j, ToField k, ToField l) => ToRecord (a, b, c, d, e, f, g, h, i, j, k, l) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j, k, l) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j, ToField k, ToField l, ToField m) => ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j, k, l, m) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j, ToField k, ToField l, ToField m, ToField n) => ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -> Record #

(ToField a, ToField b, ToField c, ToField d, ToField e, ToField f, ToField g, ToField h, ToField i, ToField j, ToField k, ToField l, ToField m, ToField n, ToField o) => ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) 
Instance details

Defined in Data.Csv.Conversion

Methods

toRecord :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -> Record #

class FromNamedRecord a where #

A type that can be converted from a single CSV record, with the possibility of failure.

When writing an instance, use empty, mzero, or fail to make a conversion fail, e.g. if a Record has the wrong number of columns.

Given this example data:

name,age
John,56
Jane,55

here's an example type and instance:

{-# LANGUAGE OverloadedStrings #-}

data Person = Person { name :: !Text, age :: !Int }

instance FromNamedRecord Person where
    parseNamedRecord m = Person <$>
                         m .: "name" <*>
                         m .: "age"

Note the use of the OverloadedStrings language extension which enables ByteString values to be written as string literals.

Instances
(FromField a, FromField b, Ord a) => FromNamedRecord (Map a b) 
Instance details

Defined in Data.Csv.Conversion

(Eq a, FromField a, FromField b, Hashable a) => FromNamedRecord (HashMap a b) 
Instance details

Defined in Data.Csv.Conversion

class ToNamedRecord a where #

A type that can be converted to a single CSV record.

An example type and instance:

data Person = Person { name :: !Text, age :: !Int }

instance ToNamedRecord Person where
    toNamedRecord (Person name age) = namedRecord [
        "name" .= name, "age" .= age]

Methods

toNamedRecord :: a -> NamedRecord #

Convert a value to a named record.

Instances
(ToField a, ToField b, Ord a) => ToNamedRecord (Map a b) 
Instance details

Defined in Data.Csv.Conversion

Methods

toNamedRecord :: Map a b -> NamedRecord #

(Eq a, ToField a, ToField b, Hashable a) => ToNamedRecord (HashMap a b) 
Instance details

Defined in Data.Csv.Conversion

class FromField a where #

A type that can be converted from a single CSV field, with the possibility of failure.

When writing an instance, use empty, mzero, or fail to make a conversion fail, e.g. if a Field can't be converted to the given type.

Example type and instance:

{-# LANGUAGE OverloadedStrings #-}

data Color = Red | Green | Blue

instance FromField Color where
    parseField s
        | s == "R"  = pure Red
        | s == "G"  = pure Green
        | s == "B"  = pure Blue
        | otherwise = mzero

Minimal complete definition

parseField

Methods

parseField :: Field -> Parser a #

Instances
FromField Char

Assumes UTF-8 encoding.

Instance details

Defined in Data.Csv.Conversion

FromField Double

Accepts same syntax as rational. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Float

Accepts same syntax as rational. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Int

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

Methods

parseField :: Field -> Parser Int #

FromField Int8

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Int16

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Int32

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Int64

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Integer

Accepts a signed decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Natural

Accepts an unsigned decimal number. Ignores whitespace.

Since: cassava-0.5.1.0

Instance details

Defined in Data.Csv.Conversion

FromField Word

Accepts an unsigned decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Word8

Accepts an unsigned decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Word16

Accepts an unsigned decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Word32

Accepts an unsigned decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField Word64

Accepts an unsigned decimal number. Ignores whitespace.

Instance details

Defined in Data.Csv.Conversion

FromField ()

Ignores the Field. Always succeeds.

Instance details

Defined in Data.Csv.Conversion

Methods

parseField :: Field -> Parser () #

FromField ByteString 
Instance details

Defined in Data.Csv.Conversion

FromField ByteString 
Instance details

Defined in Data.Csv.Conversion

FromField Text

Assumes UTF-8 encoding. Fails on invalid byte sequences.

Instance details

Defined in Data.Csv.Conversion

FromField Text

Assumes UTF-8 encoding. Fails on invalid byte sequences.

Instance details

Defined in Data.Csv.Conversion

FromField ShortByteString 
Instance details

Defined in Data.Csv.Conversion

FromField Scientific

Accepts the same syntax as rational. Ignores whitespace.

Since: cassava-0.5.1.0

Instance details

Defined in Data.Csv.Conversion

FromField ShortText

Assumes UTF-8 encoding. Fails on invalid byte sequences.

Since: cassava-0.5.0.0

Instance details

Defined in Data.Csv.Conversion

FromField [Char]

Assumes UTF-8 encoding. Fails on invalid byte sequences.

Instance details

Defined in Data.Csv.Conversion

Methods

parseField :: Field -> Parser [Char] #

FromField a => FromField (Maybe a)

Nothing if the Field is empty, Just otherwise.

Instance details

Defined in Data.Csv.Conversion

Methods

parseField :: Field -> Parser (Maybe a) #

FromField a => FromField (Either Field a)

Left field if conversion failed, Right otherwise.

Instance details

Defined in Data.Csv.Conversion

Methods

parseField :: Field -> Parser (Either Field a) #

class ToField a where #

A type that can be converted to a single CSV field.

Example type and instance:

{-# LANGUAGE OverloadedStrings #-}

data Color = Red | Green | Blue

instance ToField Color where
    toField Red   = "R"
    toField Green = "G"
    toField Blue  = "B"

Minimal complete definition

toField

Methods

toField :: a -> Field #

Instances
ToField Char

Uses UTF-8 encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Char -> Field #

ToField Double

Uses decimal notation or scientific notation, depending on the number.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Double -> Field #

ToField Float

Uses decimal notation or scientific notation, depending on the number.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Float -> Field #

ToField Int

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Int -> Field #

ToField Int8

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Int8 -> Field #

ToField Int16

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Int16 -> Field #

ToField Int32

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Int32 -> Field #

ToField Int64

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Int64 -> Field #

ToField Integer

Uses decimal encoding with optional sign.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Integer -> Field #

ToField Natural

Uses decimal encoding.

Since: cassava-0.5.1.0

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Natural -> Field #

ToField Word

Uses decimal encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Word -> Field #

ToField Word8

Uses decimal encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Word8 -> Field #

ToField Word16

Uses decimal encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Word16 -> Field #

ToField Word32

Uses decimal encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Word32 -> Field #

ToField Word64

Uses decimal encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Word64 -> Field #

ToField ByteString 
Instance details

Defined in Data.Csv.Conversion

Methods

toField :: ByteString -> Field #

ToField ByteString 
Instance details

Defined in Data.Csv.Conversion

Methods

toField :: ByteString -> Field #

ToField Text

Uses UTF-8 encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Text -> Field #

ToField Text

Uses UTF-8 encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Text -> Field #

ToField ShortByteString 
Instance details

Defined in Data.Csv.Conversion

ToField Scientific

Uses decimal notation or scientific notation, depending on the number.

Since: cassava-0.5.1.0

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Scientific -> Field #

ToField ShortText

Uses UTF-8 encoding.

Since: cassava-0.5.0.0

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: ShortText -> Field #

ToField [Char]

Uses UTF-8 encoding.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: [Char] -> Field #

ToField a => ToField (Maybe a)

Nothing is encoded as an empty field.

Instance details

Defined in Data.Csv.Conversion

Methods

toField :: Maybe a -> Field #

defaultDecodeOptions :: DecodeOptions #

Decoding options for parsing CSV files.

data DecodeOptions #

Options that controls how data is decoded. These options can be used to e.g. decode tab-separated data instead of comma-separated data.

To avoid having your program stop compiling when new fields are added to DecodeOptions, create option records by overriding values in defaultDecodeOptions. Example:

myOptions = defaultDecodeOptions {
      decDelimiter = fromIntegral (ord '\t')
    }
Instances
Eq DecodeOptions 
Instance details

Defined in Data.Csv.Parser

Show DecodeOptions 
Instance details

Defined in Data.Csv.Parser

type Record = Vector Field #

A record corresponds to a single line in a CSV file.

type Header = Vector Name #

The header corresponds to the first line a CSV file. Not all CSV files have a header.

type NamedRecord = HashMap ByteString ByteString #

A record corresponds to a single line in a CSV file, indexed by the column name rather than the column index.

type Field = ByteString #

A single field within a record.

data HasHeader #

Is the CSV data preceded by a header?

Constructors

HasHeader

The CSV data is preceded by a header

NoHeader

The CSV data is not preceded by a header