O      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN  Safe-InferredONoneP1Control the rendering of floating point numbers. Q(Use decimal notation for values between 0.1 and   9,999,999%, and scientific notation otherwise. RStandard decimal notation. SScientific notation (e.g. 2.3e123). TT! takes a base and a non-negative U 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-1V&Unsafe conversion for decimal digits. PQRSWXYZ[\]^_`TabcdefVW_PSRQWXYZ[\]^_`TabcdefVNonegA strict version of   for monads. h-Is this an empty record (i.e. a blank line)? ghghgh None A single field within a record. @A record corresponds to a single line in a CSV file, indexed by / the column name rather than the column index. BA header has one or more names, describing the data in the column  following the name. AThe header corresponds to the first line a CSV file. Not all CSV  files have a header. 5A record corresponds to a single line in a CSV file. 6CSV data represented as a Haskell vector of vector of  bytestrings. i Convert a  to a  by attaching column names.  The  and  must be of the same length. iiiNone @Options that controls how data is decoded. These options can be C 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 &, create option records by overriding  values in   . Example: $ myOptions = defaultDecodeOptions { . decDelimiter = fromIntegral (ord '\t')  } Field delimiter. (Decoding options for parsing CSV files. 1Parse a CSV file that does not include a header. jsepBy1' p sep applies one or more occurrences of p,  separated by sep+. Returns a list of the values returned by p.  The value returned by p is forced to WHNF. ( commaSep p = p `sepBy1'` (symbol ",") )Parse a CSV file that includes a header. :Parse a header, including the terminating line separator. BParse a header name. Header names have the same format as regular  s. BParse a record, not including the terminating line separator. The C terminating line separate is not included as the last record in a C 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. 9Parse a field. The field may be in either the escaped or 4 non-escaped format. The return value is unescaped.  j Field delimiter lField delimiter mnopqrs      j lmnopqrs None9AConversion of a field to a value might fail e.g. if the field is 0 malformed. This possibility is captured by the  type, which C lets you compose several field conversions together in such a way > that if any of them fail, the whole record conversion fails. tSuccess continuation. uFailure continuation. 4A 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" ?A type that can be converted from a single CSV field, with the  possibility of failure. When writing an instance, use v, w, or x 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 5A type that can be converted to a single CSV record. An example type and instance: 5 data Person = Person { name :: !Text, age :: !Int }   instance ToRecord Person where 5 toNamedRecord (Person name age) = namedRecord [ ' "name" .= name, "age" .= age] @A type that can be converted from a single CSV record, with the  possibility of failure. When writing an instance, use v, w, or x 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 #-}  5 data Person = Person { name :: !Text, age :: !Int }  " instance FromRecord Person where % parseNamedRecord m = Person <$> * m .: "name" <*> % m .: "age" Note the use of the OverloadedStrings language extension which  enables y* values to be written as string literals. 5A type that can be converted to a single CSV record. An example type and instance:  5 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 >Haskell 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. @A type that can be converted from a single CSV record, with the  possibility of failure. When writing an instance, use v, w, or x 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: 5 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  v7 if the value cannot be converted to the desired type. 4 Raises an exception if the index is out of bounds.  8 is a simple convenience function that is equivalent to   (v z 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  v= if the field is missing or if the value cannot be converted  to the desired type. # Alias for ". $8Construct a pair from a name and a value. For use with  '. % Alias for $. &"Construct a record from a list of ys. Use   to convert values to ys for use with &. '3Construct a named record from a list of name-value y  pairs. Use %3 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. 9Assumes UTF-8 encoding. Fails on invalid byte sequences. Uses UTF-8 encoding. 9Assumes UTF-8 encoding. Fails on invalid byte sequences. Uses UTF-8 encoding. 9Assumes UTF-8 encoding. Fails on invalid byte sequences. Uses decimal encoding. $Accepts an unsigned decimal number. Uses decimal encoding. $Accepts an unsigned decimal number. Uses decimal encoding. $Accepts an unsigned decimal number. Uses decimal encoding. $Accepts an unsigned decimal number. Uses decimal encoding. $Accepts an unsigned decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. *Uses decimal encoding with optional sign. !Accepts a signed decimal number. ?Uses decimal notation or scientific notation, depending on the  number. Accepts same syntax as rational. ?Uses decimal notation or scientific notation, depending on the  number. Accepts same syntax as rational. Uses UTF-8 encoding. Assumes UTF-8 encoding.  Ignores the . Always succeeds.  is encoded as an  field.  if the  is ,  otherwise. tu !{"#$%&'(~ !{"#$%&'(ztu !{"#$%&'(~ None)@Options that controls how data is encoded. These options can be D 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 )&, create option records by overriding  values in 2 . Example: $ myOptions = defaultEncodeOptions { . encDelimiter = fromIntegral (ord '\t')  } +Field delimiter. ,0Efficiently deserialize CSV records from a lazy . 3 If this fails due to incomplete or invalid input, | msg is  returned. Equivalent to 0  . -0Efficiently deserialize CSV records from a lazy . 3 If this fails due to incomplete or invalid input, | msg is < returned. The data is assumed to be preceeded by a header.  Equivalent to 1  . .,Efficiently serialize CSV records as a lazy . /,Efficiently serialize CSV records as a lazy . The D header is written before any records and dictates the field order. 0Like ,5, but lets you customize how the CSV data is parsed. Same as 0 , but more efficient as no type  conversion is performed. >Decode CSV data using the provided parser, skipping a leading  header if  skipHeader is  . Returns | errMsg on  failure. 1Like --, but lets you customize how the CSV data is  parsed. 2 Encoding options for CSV files. 3Like .-, but lets you customize how the CSV data is  encoded. 4Like /-, but lets you customize how the CSV data is  encoded. 1Parse a CSV file that does not include a header. )Parse a CSV file that includes a header. )*+,$Data contains header that should be  skipped  CSV data - CSV data ./0Decoding options $Data contains header that should be  skipped  CSV data 1Decoding options  CSV data 234 )*+,-./01234)*+,-./01234None"Have we read all available input? 5BAn incremental parser that when fed data eventually produces some D parsed records, converted to the desired type, or an error in case  of malformed input data. 6:The parser parsed and converted some records. Any records - that failed type conversion are returned as | errMsg  and the rest as } val. 7:The parser parsed and converted some records. Any records - that failed type conversion are returned as | errMsg  and the rest as } val . Feed a y to the * continuation to continue parsing. Use an  string to : indicate that no more input data is available. If fed an  2 string, the continuation is guaranteed to return  either 9 or 6. 89The 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  string, the - continuation is guaranteed to return either 9 or 6. 9;The input data was malformed. The first field contains any > unconsumed input and second field contains information about  the parse error. :>An incremental parser that when fed data eventually returns a  parsed , or an error. ;+The parse succeeded and produced the given . <9The 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  ;. =;The input data was malformed. The first field contains any > unconsumed input and second field contains information about  the parse error. >Feed a : with more input. If the : is  = it will add the input to y of unconsumed  input. If the : is ; it will drop the extra  input on the floor. ?Tell a :* that there is no more input. This passes   to a <& parser, otherwise returns the parser  unchanged. @=Parse a CSV header in an incremental fashion. When done, the  :5 returns any unconsumed input in the second field of  the ; constructor. ALike @-, but lets you customize how the CSV data is  parsed. BFeed a 5 with more input. If the 5 is 9 it  will add the input to y of unconsumed input. If the  5 is 6, it will drop the extra input on the floor. CTell a 5* that there is no more input. This passes empty  to a 81 parser, otherwise returns the parser unchanged. DBEfficiently deserialize CSV in an incremental fashion. Equivalent  to E  . ELike D5, but lets you customize how the CSV data is parsed. F@Efficiently deserialize CSV in an incremental fashion. The data 3 is assumed to be preceeded by a header. Returns a :  that when done produces a 5! for parsing the actual records.  Equivalent to G  . GLike F-, but lets you customize how the CSV data is  parsed. Like D5, but lets you customize how the CSV data is parsed. 56789:;<=>?@ABCD$Data contains header that should be  skipped EDecoding options $Data contains header that should be  skipped FGDecoding options 56789:;<=>?@ABCDEFG:=<;@A>?59876DEFGBC59876:=<;>?@ABCDEFGNoneH>A stream of parsed records. If type conversion failed for the " record, the error is returned as | errMsg. I<End of stream, potentially due to a parse error. If a parse < error occured, the first field contains the error message. 1 The second field contains any unconsumed input. J8A record or an error message, followed by more records. K<Efficiently deserialize CSV records in a streaming fashion.  Equivalent to L  . LLike K5, but lets you customize how the CSV data is parsed. M@Efficiently 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 N   . NLike M-, but lets you customize how the CSV data is  parsed. &Skips records that failed to convert. HIJK$Data contains header that should be  skipped  CSV data LDecoding options $Data contains header that should be  skipped  CSV data M CSV data NDecoding options  CSV data   HIJKLMNHJIKLMN HJIKLMN  None/  !"#$%&'()*+,-./01234/,-./ 01)*+234( !&"#'$%           ! " # $ % & ' ' ( ) * + , - . / 0  1 2 3 3 4 5 6 7 8 9 : ; < =>?@ABCDEFGHIJK596:LMN596:OPQRSTUVOWXYZ[\]^_`abcdefghijk "lmnopqrstuvw x yOz{O|}O~ OO O{ O                       k  cassava-0.2.2.0Data.CsvData.Csv.ParserData.Csv.IncrementalData.Csv.StreamingData.Csv.Compat.MonoidData.Csv.Conversion.Internal Data.Csv.Util Data.Functor<$>Data.Csv.TypesData.Csv.ConversionData.Csv.EncodingField NamedRecordNameHeaderRecordCsv DecodeOptions decDelimiterdefaultDecodeOptionscsv csvWithHeaderheadernamerecordfieldParserToFieldtoField FromField parseField ToNamedRecord toNamedRecordFromNamedRecordparseNamedRecordToRecordtoRecordOnlyfromOnly FromRecord parseRecordindex.!lookup.: namedField.= namedRecord runParser EncodeOptions encDelimiterdecode decodeByNameencode encodeByName decodeWithdecodeByNameWithdefaultEncodeOptions encodeWithencodeByNameWithDoneSomePartialFail HeaderParserDoneHPartialHFailH feedChunkHfeedEndOfInputH decodeHeaderdecodeHeaderWith feedChunkfeedEndOfInputRecordsNilConsbase Data.Monoid<>FPFormatGenericFixedExponent floatToDigits GHC.Float RealFloati2ddecimal formatDecimalformatBoundedSignedformatPositiveminuszerodigiti2w realFloatformatRealFloatminExptmaxExptexptexpts maxExpt10expts10<$!> blankLinesepBy1'attoparsec-0.10.4.0#Data.Attoparsec.ByteString.Internal endOfLineremoveBlankLines escapedFieldunescapedFielddquoteunescape doubleQuotenewlinecrSuccessFailureControl.Applicativeempty Control.MonadmzeroGHC.Basefailbytestring-0.10.0.2Data.ByteString.Internal ByteStringvector-0.10.9.1 Data.Vector! unsafeIndex 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()$fToFieldMaybe Data.MaybeNothingData.ByteString$fFromFieldMaybeJust GToRecord gtoRecordProxyGFromRecordProdgparseRecordProdGFromRecordSumgparseRecordSumGFromNamedRecordgparseNamedRecord GFromRecord gparseRecordunParsertoStrict fromStrictlengthMismatch parseDouble parseSigned parseUnsigned 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(,)$fToRecordOnly$fFromRecordOnlyData.ByteString.Lazy.Internal idDecodeWith decodeWithCghc-prim GHC.TypesTrue encodeRecordescapenamedRecordToRecord moduleErrorunlines intersperse prependToAll decodeWithPMoreComplete IncompleteappPrec $fShowParser$fShowHeaderParser$fFoldableRecords foldrRecords foldlRecords'$fNFDataRecords$fTraversableRecords