!\$NҎ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None cassava%Is the CSV data preceded by a header?cassava$The CSV data is preceded by a headercassava(The CSV data is not preceded by a headercassavaA single field within a record.cassavanA record corresponds to a single line in a CSV file, indexed by the column name rather than the column index.cassavaVA header has one or more names, describing the data in the column following the name. cassavaVThe header corresponds to the first line a CSV file. Not all CSV files have a header. cassava4A record corresponds to a single line in a CSV file. cassavaCCSV data represented as a Haskell vector of vector of bytestrings.cassava Convert a   to a ! by attaching column names. The   and   must be of the same length.  NonecassavaA strict version of   for monads.cassava,Is this an empty record (i.e. a blank line)?cassava A version of liftM23 that is strict in the result of its first action.cassava(Match either a single newline character '\n'8, or a carriage return followed by a newline character "\r\n", or a single carriage return '\r'.4None. cassavaOptions that controls how data is decoded. These options can be used to e.g. decode tab-separated data instead of comma-separated data.JTo avoid having your program stop compiling when new fields are added to  1, create option records by overriding values in  . Example: UmyOptions = defaultDecodeOptions { decDelimiter = fromIntegral (ord '\t') }cassavaField delimiter.cassava'Decoding options for parsing CSV files.cassava0Parse a CSV file that does not include a header.cassavaSpecialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.cassavaSpecialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.cassava(Parse a CSV file that includes a header.cassava9Parse a header, including the terminating line separator.cassavaCParse a header name. Header names have the same format as regular s.cassavaParse a record, not including the terminating line separator. The terminating line separate is not included as the last record in a CSV file is allowed to not have a terminating line separator. You most likely want to use the ) parser in combination with this parser.cassavalParse a field. The field may be in either the escaped or non-escaped format. The return value is unescaped.cassavaField delimitercassavaField delimitercassavaField delimiter   None7cassava0Control the rendering of floating point numbers.cassavaScientific notation (e.g. 2.3e123).cassavaStandard decimal notation.cassava(Use decimal notation for values between 0.1 and  9,999,999$, and scientific notation otherwise.cassava! takes a base and a non-negative K number, and returns a list of digits and an exponent. In particular, if x>=0, and *floatToDigits base x = ([d1,d2,...,dn], e)then  n >= 1 x = 0.d1d2...dn * (base**e) 0 <= di <= base-1cassava%Unsafe conversion for decimal digits.cassavaWord8 list rendering None-.8=>?@AHSUVXScassavaqConversion of a field to a value might fail e.g. if the field is malformed. This possibility is captured by the  type, which lets you compose several field conversions together in such a way that if any of them fail, the whole record conversion fails.cassavaSuccess continuation.cassavaFailure continuation.cassava3A 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"cassavaWA type that can be converted from a single CSV field, with the possibility of failure.When writing an instance, use , , or ' to make a conversion fail, e.g. if a ' 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!cassavaA type that has a default field order when converted to CSV. This class lets you specify how to get the headers to use for a record type that's an instance of #.To derive an instance, the type is required to only have one constructor and that constructor must have named fields (also known as selectors) for all fields.Right: data Foo = Foo { foo :: !Int }Wrong: data Bar = Bar IntIf you try to derive an instance using GHC generics and your type doesn't have named fields, you will get an error along the lines of: V<interactive>:9:10: No instance for (DefaultOrdered (M1 S NoSelector (K1 R Char) ())) arising from a use of Data.Csv.Conversion.$gdmheader  In the expression: Data.Csv.Conversion.$gdmheader In an equation for header : header = Data.Csv.Conversion.$gdmheader In the instance declaration for DefaultOrdered Foo "cassavaHThe header order for this record. Should include the names used in the  returned by #. Pass 8 as the argument, together with a type annotation e.g. " ( :: MyRecord).#cassava4A 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]$cassava"Convert a value to a named record.%cassavaXA type that can be converted from a single CSV record, with the possibility of failure.When writing an instance, use , , or ' to make a conversion fail, e.g. if a  " 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 ) values to be written as string literals.'cassava4A 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(cassavaConvert a value to a record.)cassavaXA type that can be converted from a single CSV record, with the possibility of failure.When writing an instance, use , , or ' to make a conversion fail, e.g. if a  " 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+cassavaSOptions to customise how to generically encode/decode your datatype to/from CSV.,cassava2How to convert Haskell field labels to CSV fields.-cassavaDefault conversion options.  Options { , = id } .cassava?A configurable CSV record parser. This function applied to - is used as the default for *$ when the type is an instance of ./cassava@A configurable CSV record creator. This function applied to - is used as the default for ($ when the type is an instance of .0cassavaEA configurable CSV named record parser. This function applied to - is used as the default for &$ when the type is an instance of .1cassavaFA configurable CSV named record creator. This function applied to - is used as the default for #$ when the type is an instance of .2cassavaIA configurable CSV header record generator. This function applied to - is used as the default for "! when the type is an instance of .3cassava Retrieve the n-th field in the given record. The result is j if the value cannot be converted to the desired type. Raises an exception if the index is out of bounds.39 is a simple convenience function that is equivalent to   (v  idx)@. If you're certain that the index is not out of bounds, using 5 is somewhat faster.4cassava Alias for 3.5cassavaLike 3 but without bounds checking.6cassava>Retrieve a field in the given record by name. The result is R if the field is missing or if the value cannot be converted to the desired type.7cassava Alias for 6.8cassava9Construct a pair from a name and a value. For use with ;.9cassava Alias for 8.:cassava"Construct a record from a list of s. Use  to convert values to s for use with :.;cassava3Construct a named record from a list of name-value  pairs. Use 92 to construct such a pair from a name and a value.<cassava"Construct a header from a list of s.=cassavaRun a , returning either  errMsg or  result. Forces the value in the  or ( constructors to weak head normal form.^You most likely won't need to use this function directly, but it's included for completeness.cassavaUses UTF-8 encoding.cassavaUses UTF-8 encoding.cassavaUses UTF-8 encoding.cassavaUses UTF-8 encoding.cassavaUses decimal encoding.cassavaUses decimal encoding.cassavaUses decimal encoding.cassavaUses decimal encoding.cassavaUses decimal encoding.cassavaUses decimal encoding.cassava)Uses decimal encoding with optional sign.cassava)Uses decimal encoding with optional sign.cassava)Uses decimal encoding with optional sign.cassava)Uses decimal encoding with optional sign.cassava)Uses decimal encoding with optional sign.cassava)Uses decimal encoding with optional sign.cassavaGUses decimal notation or scientific notation, depending on the number.cassavaGUses decimal notation or scientific notation, depending on the number.cassavaFUses decimal notation or scientific notation, depending on the number.cassavaUses UTF-8 encoding.cassavacassavacassava is encoded as an  field.cassavacassavacassava8Assumes UTF-8 encoding. Fails on invalid byte sequences.cassava8Assumes UTF-8 encoding. Fails on invalid byte sequences.cassava8Assumes UTF-8 encoding. Fails on invalid byte sequences.cassava8Assumes UTF-8 encoding. Fails on invalid byte sequences.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava7Accepts an unsigned decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassava4Accepts a signed decimal number. Ignores whitespace.cassavaAccepts same syntax as rational. Ignores whitespace.cassavaAccepts same syntax as rational. Ignores whitespace.cassavaAccepts the same syntax as rational. Ignores whitespace.cassavaAssumes UTF-8 encoding.cassavacassavacassava Ignores the . Always succeeds.cassava field if conversion failed,  otherwise.cassava if the  is ,  otherwise.cassava]Instance to ensure that you cannot derive DefaultOrdered for constructors without selectors.) !"#$%&'()*+,-./0123456789:;<=49 NoneXG>cassavaOptions 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.JTo avoid having your program stop compiling when new fields are added to >1, create option records by overriding values in Q . Example: UmyOptions = defaultEncodeOptions { encDelimiter = fromIntegral (ord '\t') }N.B. The @ must not be the quote character (i.e. "2) or one of the record separator characters (i.e. \n or \r).@cassavaField delimiter.AcassavaRecord separator selection. True for CRLF (\r\n) and False for LF (\n).Bcassava#Include a header row when encoding  ToNamedRecord instances.Ccassava6What kind of quoting should be applied to text fields.Dcassava8Should quoting be applied to fields, and at which level?Ecassava No quotes.FcassavaQuotes according to RFC 4180.Gcassava Always quote.Hcassava0Efficiently deserialize CSV records from a lazy 5. If this fails due to incomplete or invalid input,  msg is returned. Equivalent to M .Icassava0Efficiently deserialize CSV records from a lazy 5. If this fails due to incomplete or invalid input,  msgN is returned. The data is assumed to be preceded by a header. Equivalent to O .Jcassava,Efficiently serialize CSV records as a lazy .Kcassava,Efficiently serialize CSV records as a lazy I. The header is written before any records and dictates the field order.LcassavaLike K1, but header and field order is dictated by the < method.McassavaLike H4, but lets you customize how the CSV data is parsed.cassavaSame as M9, but more efficient as no type conversion is performed.NcassavaLike  decodeWith'), but lets you specify a parser function.cassavaIDecode CSV data using the provided parser, skipping a leading header if  hasHeader is  . Returns  errMsg on failure.OcassavaLike I5, but lets you customize how the CSV data is parsed.PcassavaLike O), but lets you specify a parser function.QcassavaEncoding options for CSV files.RcassavaLike J6, but lets you customize how the CSV data is encoded.cassava Check if the delimiter is valid.cassavaMRaises an exception indicating that the provided delimiter isn't valid. See .8Keep this message consistent with the documentation of >.cassavaNEncode a single record, without the trailing record separator (i.e. newline).cassavaqEncode a single named record, without the trailing record separator (i.e. newline), using the given field order.ScassavaLike K6, but lets you customize how the CSV data is encoded.TcassavaLike T6, but lets you customize how the CSV data is encoded.cassava0Parse a CSV file that does not include a header.cassava(Parse a CSV file that includes a header.Hcassava,Data contains header that should be skippedcassavaCSV dataIcassavaCSV dataMcassavaDecoding optionscassava,Data contains header that should be skippedcassavaCSV dataNcassavaCustom parser functioncassavaDecoding optionscassava,Data contains header that should be skippedcassavaCSV dataOcassavaDecoding optionscassavaCSV dataPcassavaCustom parser functioncassavaDecoding optionscassavaCSV data! >?@ABCDEFGHIJKLMNOPQRSTNone4X2>UcassavaBA builder for building the CSV data incrementally. Just like the  ByteString? builder, this builder should be used in a right-associative,  style. Using - to compose builders in a left-associative, foldl'. style makes the building not be incremental.VcassavaBA builder for building the CSV data incrementally. Just like the  ByteString? builder, this builder should be used in a right-associative,  style. Using - to compose builders in a left-associative, foldl'. style makes the building not be incremental.cassava!Have we read all available input?WcassavaAn 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.XcassavaThe input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error.YcassavaoThe parser parsed and converted zero or more records. Any records that failed type conversion are returned as  errMsg and the rest as  val . Feed a 2 to the continuation to continue parsing. Use an F string to indicate that no more input data is available. If fed an : string, the continuation is guaranteed to return either X or Z.ZcassavagThe parser parsed and converted some records. Any records that failed type conversion are returned as  errMsg and the rest as  val.[cassavaFAn incremental parser that when fed data eventually returns a parsed  , or an error.\cassavaThe input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error.]cassavaIThe parser needs more input data before it can produce a result. Use an  string to indicate that no more input data is available. If fed an 'B.empty string', the continuation is guaranteed to return either \ or ^.^cassava+The parse succeeded and produced the given  ._cassava>Parse a CSV header in an incremental fashion. When done, the [: returns any unconsumed input in the second field of the ^ constructor.`cassavaLike _5, but lets you customize how the CSV data is parsed.acassavaFEfficiently deserialize CSV in an incremental fashion. Equivalent to b .bcassavaLike a4, but lets you customize how the CSV data is parsed.ccassavaLike bJ, but lets you pass an explicit parser value instead of using a typeclassdcassavarEfficiently deserialize CSV in an incremental fashion. The data is assumed to be preceded by a header. Returns a [ that when done produces a W0 for parsing the actual records. Equivalent to e .ecassavaLike d5, but lets you customize how the CSV data is parsed.fcassavaLike eJ, but lets you pass an explicit parser value instead of using a typeclasscassavaLike a4, but lets you customize how the CSV data is parsed.gcassavaHEfficiently serialize records in an incremental fashion. Equivalent to h defaultEncodeOptions.hcassavaLike g6, but lets you customize how the CSV data is encoded.icassavaEncode a single record.jcassavalEfficiently serialize named records in an incremental fashion, including the leading header. Equivalent to h defaultEncodeOptionsI. The header is written before any records and dictates the field order.kcassavaLike j1, but header and field order is dictated by the " method.lcassavaLike j6, but lets you customize how the CSV data is encoded.mcassavaLike k6, but lets you customize how the CSV data is encoded.ncassavaEncode a single named record.rcassavatcassavaacassava,Data contains header that should be skippedbcassavaDecoding optionscassava,Data contains header that should be skippedccassavaDecoding optionscassava,Data contains header that should be skippedecassavaDecoding optionsfcassavaDecoding optionsUVWXZY[\]^_`abcdefghijklmn[\]^_`WXZYabcdefghiVjklmnUNone4Cycassava`A stream of parsed records. If type conversion failed for the record, the error is returned as  errMsg.zcassava7A record or an error message, followed by more records.{cassavaEnd of stream, potentially due to a parse error. If a parse error occured, the first field contains the error message. The second field contains any unconsumed input.|cassavaKEfficiently deserialize CSV records in a streaming fashion. Equivalent to } .}cassavaLike |4, but lets you customize how the CSV data is parsed.~cassavamEfficiently deserialize CSV in a streaming fashion. The data is assumed to be preceded by a header. Returns  errMsg- if parsing the header fails. Equivalent to  .cassavaLike ~5, but lets you customize how the CSV data is parsed.cassava%Skips records that failed to convert.|cassava,Data contains header that should be skippedcassavaCSV data}cassavaDecoding optionscassava,Data contains header that should be skippedcassavaCSV data~cassavaCSV datacassavaDecoding optionscassavaCSV data y{z|}~ y{z|}~NoneXKcassavaEncode a header.cassavaEncode a single record.cassava4Encode a single named record, given the field order.cassava<Encode a single named record, using the default field order.cassavaLike 6, but lets you customize how the CSV data is encoded.cassavaLike 6, but lets you customize how the CSV data is encoded.cassavaLike 6, but lets you customize how the CSV data is encoded.cassavaLike 6, but lets you customize how the CSV data is encoded.NoneLfM  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTMHIJKL!" MNOP>?@ABCDEFGQRST  )*=345'(:%&67#$;89< ./012+-,    !"# $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F  G H H I J K L M N O P Q R S T U V W X Y Z [ \ ]^_(`abcdefghQVWRXYS[iTU\]jklmnopqrstuvwQVRXxyz{|}~ij0           i j   &cassava-0.5.2.0-JJlEIvQQfyuDw2nSq9FXqoData.CsvData.Csv.IncrementalData.Csv.ParserData.Csv.StreamingData.Csv.BuilderData.Csv.Types Data.Csv.Util Data.Functor<$>Data.Csv.Conversion.InternalData.Csv.ConversionData.Csv.EncodingOnly-0.1-4eYnxvcrr7tEbYgCvIkHLbData.Tuple.OnlyfromOnlyOnly HasHeaderNoHeaderField NamedRecordNameHeaderRecordCsv DecodeOptions decDelimiterdefaultDecodeOptionscsv csvWithHeaderheadernamerecordfield$fEqDecodeOptions$fShowDecodeOptionsGToNamedRecordHeader GToRecordGFromNamedRecord GFromRecordParserToFieldtoField FromField parseFieldDefaultOrdered headerOrder ToNamedRecord toNamedRecordFromNamedRecordparseNamedRecordToRecordtoRecord FromRecord parseRecordOptionsfieldLabelModifierdefaultOptionsgenericParseRecordgenericToRecordgenericParseNamedRecordgenericToNamedRecordgenericHeaderOrderindex.! unsafeIndexlookup.: namedField.= namedRecord runParser EncodeOptions encDelimiter encUseCrLfencIncludeHeader encQuotingQuoting QuoteNone QuoteMinimalQuoteAlldecode decodeByNameencode encodeByNameencodeDefaultOrderedByName decodeWith decodeWithPdecodeByNameWithdecodeByNameWithPdefaultEncodeOptions encodeWithencodeByNameWithencodeDefaultOrderedByNameWith NamedBuilderBuilderFailManyDone HeaderParserFailHPartialHDoneH decodeHeaderdecodeHeaderWith encodeRecordencodeNamedRecord$fShowHeaderParser $fShowParser$fMonoidBuilder$fSemigroupBuilder$fMonoidNamedBuilder$fSemigroupNamedBuilder$fFunctorHeaderParser$fFunctorParser$fEqMore $fShowMoreRecordsConsNil$fNFDataRecords$fTraversableRecords$fFoldableRecords $fEqRecords$fFunctorRecords $fShowRecords encodeHeaderencodeDefaultOrderedNamedRecordencodeHeaderWithencodeRecordWithencodeNamedRecordWith#encodeDefaultOrderedNamedRecordWith<$!> blankLineliftM2' endOfLinebytestring-0.10.8.2Data.ByteString.LazytoStrict doubleQuotenewlinecr sepByDelim1'sepByEndOfLine1'FPFormatExponentFixedGeneric floatToDigitsbase GHC.Float RealFloati2dword8sdecimal scientific realFloatSuccessFailureGHC.BaseemptymzerofailGHC.Err undefinedData.ByteString.Internal ByteString GHC.Generics&vector-0.12.0.3-ChzWbiXyvuNAQj0dcU08Sg Data.Vector! Data.EitherLeftRight $fToField[] $fToFieldText$fToFieldText0$fToFieldShortText$fToFieldWord64$fToFieldWord32$fToFieldWord16$fToFieldWord8$fToFieldNatural $fToFieldWord$fToFieldInt64$fToFieldInt32$fToFieldInt16 $fToFieldInt8$fToFieldInteger $fToFieldInt$fToFieldFloat$fToFieldDouble$fToFieldScientific $fToFieldChar$fToFieldConst$fToFieldIdentity$fToFieldMaybe GHC.MaybeNothingData.ByteString$fSemigroupParser$fMonadFailParser $fFromField[]$fFromFieldText$fFromFieldText0$fFromFieldShortText$fFromFieldWord64$fFromFieldWord32$fFromFieldWord16$fFromFieldWord8$fFromFieldNatural$fFromFieldWord$fFromFieldInt64$fFromFieldInt32$fFromFieldInt16$fFromFieldInt8$fFromFieldInteger$fFromFieldInt$fFromFieldFloat$fFromFieldDouble$fFromFieldScientific$fFromFieldChar$fFromFieldConst$fFromFieldIdentity $fFromField()$fFromFieldEither$fFromFieldMaybeJust$fGToNamedRecordHeaderTYPEM1Data.ByteString.Lazy.Internal idDecodeWith decodeWithC validDelimencodeOptionsError recordSep Data.Foldablefoldr<>More decodeWithP'