cassava-streams-0.3.0.4: io-streams interface for the cassava CSV library.

Safe HaskellNone
LanguageHaskell2010

System.IO.Streams.Csv

Contents

Description

This module exports functions which can be used to read instances of the cassava classes FromRecord and FromNamedRecord from an io-streams InputStream ByteString.

It also exports functions which can write instances of ToRecord and ToNamedRecord to an io-streams OutputStream ByteString.

See the System.IO.Streams.Csv.Tutorial module for a simple tutorial.

Synopsis

Decoding CSV

These functions convert an io-streams InputStream ByteString stream into one that decodes CSV records and produces these decoded records.

Each of the decoding functions produce an InputStream which yields an Either value. Left String represents a record which failed type conversion. Right a is a successfully decoded record.

See the tutorial in System.IO.Streams.Csv.Tutorial for details on how to use the onlyValidRecords function to transform the decoding streams so that they only produce valid records and throw exceptions for bad records.

decodeStream Source #

Arguments

:: FromRecord a 
=> HasHeader

Whether to skip a header or not.

-> InputStream ByteString

Upstream.

-> IO (InputStream (Either String a))

An InputStream which produces records.

Create an InputStream which decodes CSV records from the given upstream data source.

Equivalent to decodeStreamWith defaultDecodeOptions.

decodeStreamWith Source #

Arguments

:: FromRecord a 
=> DecodeOptions

CSV decoding options.

-> HasHeader

Whether to skip a header or not.

-> InputStream ByteString

Upstream.

-> IO (InputStream (Either String a))

An InputStream which produces records.

Create an InputStream which decodes CSV records from the given upstream data source.

decodeStreamByName Source #

Arguments

:: FromNamedRecord a 
=> InputStream ByteString

Upstream.

-> IO (InputStream (Either String a))

An InputStream which produces records.

Create an InputStream which decodes CSV records from the given upstream data source. Data should be preceded by a header.

Equivalent to decodeStreamByNameWith defaultDecodeOptions.

decodeStreamByNameWith Source #

Arguments

:: FromNamedRecord a 
=> DecodeOptions

CSV decoding options.

-> InputStream ByteString

Upstream.

-> IO (InputStream (Either String a))

An InputStream which produces records.

Create an InputStream which decodes CSV records from the given upstream data source. Data should be preceded by a header.

onlyValidRecords Source #

Arguments

:: InputStream (Either String a)

Upstream.

-> IO (InputStream a)

An InputStream which only produces valid records.

Creates a new InputStream which only sends valid CSV records downstream. The first invalid record will throw an exception.

Encoding CSV

These functions convert an io-streams OutputStream ByteString stream into one that encodes records into CSV format before sending them downstream.

encodeStream Source #

Arguments

:: ToRecord a 
=> OutputStream ByteString

Downstream.

-> IO (OutputStream a)

New OutputStream.

Create a new OutputStream that can be fed ToRecord values which are converted to CSV. The records are encoded into ByteStrings and passed on to the given downstream OutputStream.

Equivalent to encodeStreamWith defaultEncodeOptions.

encodeStreamWith Source #

Arguments

:: ToRecord a 
=> EncodeOptions

Encoding options.

-> OutputStream ByteString

Downstream.

-> IO (OutputStream a)

New OutputStream.

Create a new OutputStream that can be fed ToRecord values which are converted to CSV. The records are encoded into ByteStrings and passed on to the given downstream OutputStream.

encodeStreamByName Source #

Arguments

:: ToNamedRecord a 
=> Header

CSV Header.

-> OutputStream ByteString

Downstream.

-> IO (OutputStream a)

New OutputStream.

Create a new OutputStream which can be fed ToNamedRecord values that will be converted into CSV. The records are encoded into ByteStrings and passed on to the given downstream OutputStream.

Equivalent to encodeStreamByNameWith defaultEncodeOptions.

encodeStreamByNameWith Source #

Arguments

:: ToNamedRecord a 
=> EncodeOptions

Encoding options.

-> Header

CSV Header.

-> OutputStream ByteString

Downstream.

-> IO (OutputStream a)

New OutputStream.

Create a new OutputStream which can be fed ToNamedRecord values that will be converted into CSV. The records are encoded into ByteStrings and passed on to the given downstream OutputStream.

Convenience Exports

Export data types from Data.Csv

defaultEncodeOptions :: EncodeOptions #

Encoding options for CSV files.

data Quoting #

Should quoting be applied to fields, and at which level?

Constructors

QuoteNone

No quotes.

QuoteMinimal

Quotes according to RFC 4180.

QuoteAll

Always quote.

Instances
Eq Quoting 
Instance details

Defined in Data.Csv.Encoding

Methods

(==) :: Quoting -> Quoting -> Bool #

(/=) :: Quoting -> Quoting -> Bool #

Show Quoting 
Instance details

Defined in Data.Csv.Encoding

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).

Constructors

EncodeOptions 

Fields

Instances
Eq EncodeOptions 
Instance details

Defined in Data.Csv.Encoding

Show EncodeOptions 
Instance details

Defined in Data.Csv.Encoding

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')
    }

Constructors

DecodeOptions 

Fields

Instances
Eq DecodeOptions 
Instance details

Defined in Data.Csv.Parser

Show DecodeOptions 
Instance details

Defined in Data.Csv.Parser

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