Y3P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO  Safe-InferredPNoneQ0Control the rendering of floating point numbers.R(Use decimal notation for values between 0.1 and  9,999,999$, and scientific notation otherwise.SStandard decimal notation.TScientific notation (e.g. 2.3e123).UU! takes a base and a non-negative VK 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-1W%Unsafe conversion for decimal digits.QRSTXYZ[\]^_`aUbcdefgWX`QTSRXYZ[\]^_`aUbcdefgWNonehA strict version of   for monads.i,Is this an empty record (i.e. a blank line)?j A version of liftM23 that is strict in the result of its first action.k(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'.hijklmnhijklmnhijklmnh None %Is the CSV data preceded by a header?(The CSV data is not preceded by a header$The CSV data is preceded by a headerA single field within a record.nA record corresponds to a single line in a CSV file, indexed by the column name rather than the column index.VA header has one or more names, describing the data in the column following the name.VThe header corresponds to the first line a CSV file. Not all CSV files have a header.4A record corresponds to a single line in a CSV file.CCSV data represented as a Haskell vector of vector of bytestrings.o Convert a  to a ! by attaching column names. The  and  must be of the same length. o ooNone Options 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') } Field delimiter. 'Decoding options for parsing CSV files. 0Parse a CSV file that does not include a header.pSpecialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.qSpecialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.(Parse a CSV file that includes a header.9Parse a header, including the terminating line separator.CParse a header name. Header names have the same format as regular s.Parse 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 k) parser in combination with this parser.lParse a field. The field may be in either the escaped or non-escaped format. The return value is unescaped. pField delimiterqField delimiterrField delimiterstuv    pqrstuv None12346=HJKM:qConversion 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.wSuccess continuation.xFailure continuation.3A 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"WA type that can be converted from a single CSV field, with the possibility of failure.When writing an instance, use y, z, 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 = mzero4A 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]XA type that can be converted from a single CSV record, with the possibility of failure.When writing an instance, use y, z, 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.4A 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,55dHaskell lacks a single-element tuple type, so if you CSV data with just one column you can use the + type to represent a single-column result.!XA type that can be converted from a single CSV record, with the possibility of failure.When writing an instance, use y, z, 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# Retrieve the n-th field in the given record. The result is yj if the value cannot be converted to the desired type. Raises an exception if the index is out of bounds.#9 is a simple convenience function that is equivalent to  (v } idx)@. If you're certain that the index is not out of bounds, using % is somewhat faster.$ Alias for #.%Like # but without bounds checking.&>Retrieve a field in the given record by name. The result is yR if the field is missing or if the value cannot be converted to the desired type.' Alias for &.(9Construct a pair from a name and a value. For use with +.) Alias for (.*"Construct a record from a list of |s. Use  to convert values to |s for use with *.+3Construct a named record from a list of name-value | pairs. Use )2 to construct such a pair from a name and a value.,Run 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.Uses UTF-8 encoding.8Assumes UTF-8 encoding. Fails on invalid byte sequences.Uses UTF-8 encoding.8Assumes UTF-8 encoding. Fails on invalid byte sequences.Uses UTF-8 encoding.8Assumes UTF-8 encoding. Fails on invalid byte sequences.Uses decimal encoding.7Accepts an unsigned decimal number. Ignores whitespace.Uses decimal encoding.7Accepts an unsigned decimal number. Ignores whitespace.Uses decimal encoding.7Accepts an unsigned decimal number. Ignores whitespace.Uses decimal encoding.7Accepts an unsigned decimal number. Ignores whitespace.Uses decimal encoding.7Accepts an unsigned decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.)Uses decimal encoding with optional sign.4Accepts a signed decimal number. Ignores whitespace.GUses decimal notation or scientific notation, depending on the number.Accepts same syntax as rational. Ignores whitespace.GUses decimal notation or scientific notation, depending on the number.Accepts same syntax as rational. Ignores whitespace.Uses UTF-8 encoding.Assumes UTF-8 encoding. Ignores the . Always succeeds.~ field if conversion failed,  otherwise. is encoded as an  field. if the  is ,  otherwise.wx !"#$%&'()*+, !"#$%&'()*+,wx !"#$%&'()*+,$ None-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.JTo avoid having your program stop compiling when new fields are added to -1, create option records by overriding values in 8 . 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)./Field delimiter.0Record separator selection. True for CRLF (\r\n) and False for LF (\n).1#Include a header row when encoding  ToNamedRecord instances.20Efficiently deserialize CSV records from a lazy 5. If this fails due to incomplete or invalid input, ~ msg is returned. Equivalent to 6  .30Efficiently deserialize CSV records from a lazy 5. If this fails due to incomplete or invalid input, ~ msgO is returned. The data is assumed to be preceeded by a header. Equivalent to 7  .4,Efficiently serialize CSV records as a lazy .5,Efficiently serialize CSV records as a lazy I. The header is written before any records and dictates the field order.6Like 24, but lets you customize how the CSV data is parsed.Same as 69, but more efficient as no type conversion is performed.IDecode CSV data using the provided parser, skipping a leading header if  hasHeader is  . Returns ~ errMsg on failure.7Like 35, but lets you customize how the CSV data is parsed.8Encoding options for CSV files.9Like 46, but lets you customize how the CSV data is encoded. Check if the delimiter is valid.MRaises an exception indicating that the provided delimiter isn't valid. See .8Keep this message consistent with the documentation of -.:Like 56, but lets you customize how the CSV data is encoded.0Parse a CSV file that does not include a header.(Parse a CSV file that includes a header.-./012,Data contains header that should be skippedCSV data3CSV data456Decoding options,Data contains header that should be skippedCSV data7Decoding optionsCSV data89: -./0123456789:-./0123456789:None-!Have we read all available input?;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.<gThe parser parsed and converted some records. Any records that failed type conversion are returned as ~ errMsg and the rest as  val.=oThe 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 > or <.>The input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error.?FAn incremental parser that when fed data eventually returns a parsed , or an error.@+The parse succeeded and produced the given .AIThe 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 B or @.BThe input data was malformed. The first field contains any unconsumed input and second field contains information about the parse error.C>Parse a CSV header in an incremental fashion. When done, the ?: returns any unconsumed input in the second field of the @ constructor.DLike C5, but lets you customize how the CSV data is parsed.EFEfficiently deserialize CSV in an incremental fashion. Equivalent to F  .FLike E4, but lets you customize how the CSV data is parsed.GsEfficiently deserialize CSV in an incremental fashion. The data is assumed to be preceeded by a header. Returns a ? that when done produces a ;0 for parsing the actual records. Equivalent to H  .HLike G5, but lets you customize how the CSV data is parsed. Like E4, but lets you customize how the CSV data is parsed.  ;<=>?@AB CDE,Data contains header that should be skippedFDecoding options,Data contains header that should be skippedGHDecoding options  ;<=>?@ABCDEFGH?BA@CD;>=<EFGH  ;>=<?BA@ CDEFGH  None-I`A stream of parsed records. If type conversion failed for the record, the error is returned as ~ errMsg.JEnd 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.K7A record or an error message, followed by more records.LKEfficiently deserialize CSV records in a streaming fashion. Equivalent to M  .MLike L4, but lets you customize how the CSV data is parsed.NnEfficiently deserialize CSV in a streaming fashion. The data is assumed to be preceeded by a header. Returns ~ errMsg- if parsing the header fails. Equivalent to O  .OLike N5, but lets you customize how the CSV data is parsed.%Skips records that failed to convert. IJKL,Data contains header that should be skippedCSV dataMDecoding options,Data contains header that should be skippedCSV dataNCSV dataODecoding optionsCSV data IJKLMNO IKJLMNO IKJLMNONone5  !"#$%&'()*+,-./0123456789:52345 67-./0189:!",#$%* &'+()            ! " # $ % & ' ( ) ) * + , - . / 0 1 2 3  4 5 6 6 7 8 9 : ; < = > ? @ A BCDEFGHIJK:>;?LMN:>;?OPQRSTUVOWXYZ[\]^_`abcdefghijklmnop $qrstuvw x yOz{O|}O~OO O{ O                          kcassava-0.4.2.2Data.Csv.IncrementalData.CsvData.Csv.ParserData.Csv.StreamingData.Csv.Compat.MonoidData.Csv.Conversion.Internal Data.Csv.Util Data.Functor<$>Data.Csv.TypesData.Csv.ConversionData.Csv.Encoding HasHeaderNoHeaderField NamedRecordNameHeaderRecordCsv DecodeOptions decDelimiterdefaultDecodeOptionscsv csvWithHeaderheadernamerecordfieldParserToFieldtoField FromField parseField ToNamedRecord toNamedRecordFromNamedRecordparseNamedRecordToRecordtoRecordOnlyfromOnly FromRecord parseRecordindex.! unsafeIndexlookup.: namedField.= namedRecord runParser EncodeOptions encDelimiter encUseCrLfencIncludeHeaderdecode decodeByNameencode encodeByName decodeWithdecodeByNameWithdefaultEncodeOptions encodeWithencodeByNameWithDoneManyFail HeaderParserDoneHPartialHFailH decodeHeaderdecodeHeaderWithRecordsNilConsbase Data.Monoid<>FPFormatGenericFixedExponent floatToDigits GHC.Float RealFloati2ddecimal formatDecimalformatBoundedSignedformatPositiveminuszerodigiti2w realFloatformatRealFloatminExptmaxExptexptexpts maxExpt10expts10<$!> blankLineliftM2' endOfLine doubleQuotenewlinecr sepByDelim1'sepByEndOfLine1'removeBlankLines escapedFieldunescapedFielddquoteunescapeSuccessFailureControl.Applicativeempty Control.MonadmzeroGHC.Basefailbytestring-0.10.4.0Data.ByteString.Internal ByteStringvector-0.10.12.2 Data.Vector! Data.EitherLeftRight $fToField[] $fFromField[] $fToFieldText$fFromFieldText$fToFieldText0$fFromFieldText0$fToFieldWord64$fFromFieldWord64$fToFieldWord32$fFromFieldWord32$fToFieldWord16$fFromFieldWord16$fToFieldWord8$fFromFieldWord8 $fToFieldWord$fFromFieldWord$fToFieldInt64$fFromFieldInt64$fToFieldInt32$fFromFieldInt32$fToFieldInt16$fFromFieldInt16 $fToFieldInt8$fFromFieldInt8$fToFieldInteger$fFromFieldInteger $fToFieldInt$fFromFieldInt$fToFieldFloat$fFromFieldFloat$fToFieldDouble$fFromFieldDouble $fToFieldChar$fFromFieldChar $fFromField()$fFromFieldEither$fToFieldMaybe Data.MaybeNothingData.ByteString$fFromFieldMaybeJust GToRecord gtoRecordProxyGFromRecordProdgparseRecordProdGFromRecordSumgparseRecordSumGFromNamedRecordgparseNamedRecord GFromRecord gparseRecordunParsertoStrict fromStrictlengthMismatch parseDouble parseSigned parseUnsignedws parseOnly typeErrorapP$fGToRecordM1(,)$fGToRecordK1ByteString$fGToRecordM1ByteString$fGToRecordM1f$fGToRecordM1f0$fGToRecord:+:f$fGToRecord:*:f$fGToRecordU1f$fGFromRecordProdM1HashMap$fGFromRecordProdK1Vector$fGFromRecordProdM1Vector$fGFromRecordProd:*:r$fGFromRecordProdU1r$fGFromRecordSumM1r$fGFromRecordSum:+:r$fGFromNamedRecordM1$fGFromRecordM1$fMonoidParser$fMonadPlusParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fMonadParser$fToFieldByteString$fFromFieldByteString$fToFieldByteString0$fFromFieldByteString0$fToNamedRecordHashMap$fFromNamedRecordHashMap$fToNamedRecordMap$fFromNamedRecordMap$fToRecordVector$fFromRecordVector$fToRecordVector0$fFromRecordVector0 $fToRecord[]$fFromRecord[]$fToRecord(,,,,,,,,)$fFromRecord(,,,,,,,,)$fToRecord(,,,,,,,)$fFromRecord(,,,,,,,)$fToRecord(,,,,,,)$fFromRecord(,,,,,,)$fToRecord(,,,,,)$fFromRecord(,,,,,)$fToRecord(,,,,)$fFromRecord(,,,,)$fToRecord(,,,)$fFromRecord(,,,)$fToRecord(,,)$fFromRecord(,,) $fToRecord(,)$fFromRecord(,)$fToRecordOnly$fFromRecordOnlyData.ByteString.Lazy.Internal idDecodeWith decodeWithC validDelimencodeOptionsError encodeRecordescapenamedRecordToRecord moduleError recordSepunlines intersperse prependToAll decodeWithPMoreComplete IncompleteappPrec $fShowParser$fShowHeaderParser$fFoldableRecords foldrRecords foldlRecords'$fNFDataRecords$fTraversableRecords