| Safe Haskell | None |
|---|
Data.Csv.Incremental
Contents
Description
This module allows for incremental decoding of CSV data. This is useful if you e.g. want to interleave I/O with parsing or if you want finer grained control over how you deal with type conversion errors.
- data HeaderParser a
- = FailH !ByteString String
- | PartialH (ByteString -> HeaderParser a)
- | DoneH !Header a
- decodeHeader :: HeaderParser ByteString
- decodeHeaderWith :: DecodeOptions -> HeaderParser ByteString
- data Parser a
- data HasHeader
- decode :: FromRecord a => HasHeader -> Parser a
- decodeWith :: FromRecord a => DecodeOptions -> HasHeader -> Parser a
- decodeByName :: FromNamedRecord a => HeaderParser (Parser a)
- decodeByNameWith :: FromNamedRecord a => DecodeOptions -> HeaderParser (Parser a)
Decoding headers
data HeaderParser a Source
An incremental parser that when fed data eventually returns a
parsed Header, or an error.
Constructors
| FailH !ByteString String | The input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error. |
| PartialH (ByteString -> HeaderParser a) | The parser needs more input data before it can produce a
result. Use an |
| DoneH !Header a | The parse succeeded and produced the given |
Instances
| Functor HeaderParser | |
| Show a => Show (HeaderParser a) |
decodeHeader :: HeaderParser ByteStringSource
Parse a CSV header in an incremental fashion. When done, the
HeaderParser returns any unconsumed input in the second field of
the DoneH constructor.
decodeHeaderWith :: DecodeOptions -> HeaderParser ByteStringSource
Like decodeHeader, but lets you customize how the CSV data is
parsed.
Decoding records
Just like in the case of non-incremental decoding, there are two ways to convert CSV records to and from and user-defined data types: index-based conversion and name-based conversion.
An incremental parser that when fed data eventually produces some parsed records, converted to the desired type, or an error in case of malformed input data.
Constructors
| Fail !ByteString String | The input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error. |
| Many [Either String a] (ByteString -> Parser a) | The parser parsed and converted zero or more records. Any
records that failed type conversion are returned as |
| Done [Either String a] | The parser parsed and converted some records. Any records
that failed type conversion are returned as |
Index-based record conversion
See documentation on index-based conversion in Data.Csv for more information.
Is the CSV data preceded by a header?
Arguments
| :: FromRecord a | |
| => HasHeader | Data contains header that should be skipped |
| -> Parser a |
Efficiently deserialize CSV in an incremental fashion. Equivalent
to .
decodeWith defaultDecodeOptions
Arguments
| :: FromRecord a | |
| => DecodeOptions | Decoding options |
| -> HasHeader | Data contains header that should be skipped |
| -> Parser a |
Like decode, but lets you customize how the CSV data is parsed.
Name-based record conversion
See documentation on name-based conversion in Data.Csv for more information.
decodeByName :: FromNamedRecord a => HeaderParser (Parser a)Source
Efficiently deserialize CSV in an incremental fashion. The data
is assumed to be preceeded by a header. Returns a HeaderParser
that when done produces a Parser for parsing the actual records.
Equivalent to .
decodeByNameWith defaultDecodeOptions
Arguments
| :: FromNamedRecord a | |
| => DecodeOptions | Decoding options |
| -> HeaderParser (Parser a) |
Like decodeByName, but lets you customize how the CSV data is
parsed.