úÎ!İOÒ㤠     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£Safe¤Nonep¥ csv-conduit0Control the rendering of floating point numbers.¦ csv-conduitScientific notation (e.g. 2.3e123).§ csv-conduitStandard decimal notation.¨ csv-conduit(Use decimal notation for values between 0.1 and  9,999,999$, and scientific notation otherwise.© csv-conduit©! 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-1« csv-conduit%Unsafe conversion for decimal digits.¬­Ozgun Ataman, Johan TibellBSD3!Ozgun Ataman <ozataman@gmail.com> experimentalNone.8=>?@AHSUVXwí= csv-conduitqConversion 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.® csv-conduitSuccess continuation.¯ csv-conduitFailure continuation. csv-conduit3A 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" csv-conduitWA 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 csv-conduit4A 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] csv-conduitXA 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.  csv-conduit4A 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  csv-conduitdHaskell 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. csv-conduitXA 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 csv-conduitA single field within a record. csv-conduit4A record corresponds to a single line in a CSV file. csv-conduitiA wrapper around custom haskell types that can directly be converted/parsed from an incoming CSV stream.[We define this wrapper to stop GHC from complaining about overlapping instances. Just use ( to get your object out of the wrapper. csv-conduit'A shorthand for the ByteString case of MapRow csv-conduit 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.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. csv-conduit Alias for . csv-conduitLike  but without bounds checking. csv-conduit>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. csv-conduit Alias for . csv-conduit9Construct a pair from a name and a value. For use with . csv-conduit Alias for . csv-conduit"Construct a record from a list of ³s. Use  to convert values to ³s for use with . csv-conduit3Construct a named record from a list of name-value ³ pairs. Use 2 to construct such a pair from a name and a value.  csv-conduitRun 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.! csv-conduitUses UTF-8 encoding." csv-conduitUses UTF-8 encoding.# csv-conduitUses UTF-8 encoding.& csv-conduitUses decimal encoding.' csv-conduitUses decimal encoding.( csv-conduitUses decimal encoding.) csv-conduitUses decimal encoding.* csv-conduitUses decimal encoding.+ csv-conduit)Uses decimal encoding with optional sign., csv-conduit)Uses decimal encoding with optional sign.- csv-conduit)Uses decimal encoding with optional sign.. csv-conduit)Uses decimal encoding with optional sign./ csv-conduit)Uses decimal encoding with optional sign.0 csv-conduit)Uses decimal encoding with optional sign.1 csv-conduitGUses decimal notation or scientific notation, depending on the number.2 csv-conduitGUses decimal notation or scientific notation, depending on the number.3 csv-conduitUses UTF-8 encoding.4 csv-conduit· is encoded as an ¸ field.; csv-conduit8Assumes UTF-8 encoding. Fails on invalid byte sequences.< csv-conduit8Assumes UTF-8 encoding. Fails on invalid byte sequences.= csv-conduit8Assumes UTF-8 encoding. Fails on invalid byte sequences.@ csv-conduit#Accepts an unsigned decimal number.A csv-conduit#Accepts an unsigned decimal number.B csv-conduit#Accepts an unsigned decimal number.C csv-conduit#Accepts an unsigned decimal number.D csv-conduit#Accepts an unsigned decimal number.E csv-conduit Accepts a signed decimal number.F csv-conduit Accepts a signed decimal number.G csv-conduit Accepts a signed decimal number.H csv-conduit Accepts a signed decimal number.I csv-conduit Accepts a signed decimal number.J csv-conduit Accepts a signed decimal number.K csv-conduitAccepts same syntax as rational.L csv-conduitAccepts same syntax as rational.M csv-conduitAssumes UTF-8 encoding.N csv-conduit Ignores the . Always succeeds.O csv-conduit· if the  is ¸, ¹ otherwise.      9 Safe=ƒ csv-conduitA  is a dictionary based on  V where column names are keys and row's individual cell values are the values of the Map.€ csv-conduitA € is just a list of fields csv-conduitˆSettings for a CSV file. This library is intended to be flexible and offer a way to process the majority of text data files out there.ƒ csv-conduit0Separator character to be used in between fields„ csv-conduitAQuote character that may sometimes be present around fields. If ·J is given, the library will never expect quotation even if it is present.… csv-conduit Default settings for a CSV file. $csvSep = ',' csvQuoteChar = Just '"'€‚„ƒ…‚„ƒ…€Safe…àŠ csv-conduit Try to parse given string as CSV‹ csv-conduit'Try to parse given string as 'Row Text'Œ csv-conduit Parse CSV csv-conduitParse a CSV rowŠ‹ŒŠ‹ŒSafeˆ¢ csv-conduit Try to parse given string as CSV csv-conduit-Try to parse given string as 'Row ByteString' csv-conduit Parse CSV‘ csv-conduitParse a CSV row‘‘None =>?@ASXÒG’ csv-conduitRepresents types rN that are CSV-like and can be converted to/from an underlying stream of type s). There is nothing scary about the type:sO represents stream types that can be converted to/from CSV rows. Examples are ³, º and ».rb represents the target CSV row representations that this library can work with. Examples are the € types, the Record type and the S family of types. We can also convert directly to complex Haskell types using the  e module that was borrowed from the cassava package, which was itself inspired by the aeson package.(Example #1: Basics Using Convenience API ÿQimport Data.Conduit import Data.Conduit.Binary import Data.Conduit.List as CL import Data.CSV.Conduit myProcessor :: Conduit (Row Text) m (Row Text) myProcessor = CL.map reverse test = runResourceT $ transformCSV defCSVSettings (sourceFile "input.csv") myProcessor (sinkFile "output.csv")$Example #2: Basics Using Conduit API ÿfimport Data.Conduit import Data.Conduit.Binary import Data.CSV.Conduit myProcessor :: Conduit (MapRow Text) m (MapRow Text) myProcessor = undefined test = runResourceT $ runConduit $ sourceFile "test/BigFile.csv" .| intoCSV defCSVSettings .| myProcessor .| (writeHeaders defCSVSettings >> fromCSV defCSVSettings) .| sinkFile "test/BigFileOut.csv"“ csv-conduit4Convert a CSV row into strict ByteString equivalent.” csv-conduitTurn a stream of s\ into a stream of CSV row type. An example would be parsing a ByteString stream as rows of  º.• csv-conduit4Turn a stream of CSV row type back into a stream of s-. An example would be rendering a stream of € ³ rows as º.– csv-conduit\Write headers AND the row into the output stream, once. If you don't call this while using R family of row types, then your resulting output will NOT have any headers in it.!Usage: Just chain this using the ¼ instance in your pipeline: OrunConduit $ ... .| writeHeaders settings >> fromCSV settings .| sinkFile "..."— csv-conduit3Read the entire contents of a CSV file into memory.˜ csv-conduitcA simple way to decode a CSV string. Don't be alarmed by the polymorphic nature of the signature. s! is the type for the string and v is a kind of Vector here.For example for ³:s <- LB.readFile "my.csv"OdecodeCSV defCSVSettings s :: Either SomeException (Vector (Vector ByteString))1will work as long as the data is comma separated.™ csv-conduit&Write CSV data into file. As we use a ³, sink, you'll need to get your data into a ³ stream type.š csv-conduitRMap over the rows of a CSV file. Provided for convenience for historical reasons.*An easy way to run this function would be % after feeding it all the arguments.› csv-conduitILike transformCSV' but uses the same settings for both input and output.œ csv-conduitMGeneral purpose CSV transformer. Apply a list-like processing function from   o to the rows of a CSV stream. You need to provide a stream data source, a transformer and a stream data sink.*An easy way to run this function would be % after feeding it all the arguments.5Example - map a function over the rows of a CSV file: JtransformCSV setIn setOut (sourceFile inFile) (C.map f) (sinkFile outFile)½ csv-conduitIAn efficient sink that incrementally grows a vector from the input stream csv-conduitEConversion of stream directly to/from a custom complex haskell type. csv-conduitGeneric " instance; any stream type with a € instance automatically gets a  instance.Ÿ csv-conduit Support for parsing rows in the Vector form.  csv-conduit€ instance using » based on ³… stream. Please note this uses the ByteString operations underneath and has lots of unnecessary overhead. Included for convenience.¡ csv-conduit€ instance using º based on ³ stream¢ csv-conduit€ instance using º£ csv-conduit€ instance using ³— csv-conduit%Settings to use in deciphering stream csv-conduit Input file™ csv-conduit CSV Settings csv-conduit Target file csv-conduitWrite vs. append mode csv-conduit List of rowsš csv-conduit.Settings to use both for both input and output csv-conduitA mapping function csv-conduit Input file csv-conduit Output file› csv-conduit-Settings to be used for both input and output csv-conduit1A raw stream data source. Ex: 'sourceFile inFile' csv-conduitA transforming conduit csv-conduit.A raw stream data sink. Ex: 'sinkFile outFile'œ csv-conduitSettings to be used for input csv-conduitSettings to be used for output csv-conduit1A raw stream data source. Ex: 'sourceFile inFile' csv-conduitA transforming conduit csv-conduit.A raw stream data sink. Ex: 'sinkFile outFile'€‚ƒ„…’“”•–—˜™š›œ˜—™›œš–’“”•‚ƒ„…€¾  !!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³¬´µ¶·¸¹º¬­»¬­¼¬­½¾¿ÀÁÂìÄŬÄƬÇȾɻ¬ÇÊËÌͬ­ά­ÏĞÑ*csv-conduit-0.7.1.0-4jvOzpH3XnTLfUaFyeyTeZData.CSV.ConduitData.CSV.Conduit.ConversionData.CSV.Conduit.TypesData.CSV.Conduit.Parser.Text"Data.CSV.Conduit.Parser.ByteStringData.CSV.Conduit.Monoid$Data.CSV.Conduit.Conversion.InternalDataMap Conversion Data.ConduitList&resourcet-1.2.2-9mQA4C1qNtbAMbQUuTwoFYControl.Monad.Trans.Resource runResourceTParserToFieldtoField FromField parseField ToNamedRecord toNamedRecordFromNamedRecordparseNamedRecordToRecordtoRecordOnlyfromOnly FromRecord parseRecordFieldRecordNamedgetNamed NamedRecordindex.! unsafeIndexlookup.: namedField.=record namedRecord runParser $fToField[] $fToFieldText$fToFieldText0$fToFieldByteString$fToFieldByteString0$fToFieldWord64$fToFieldWord32$fToFieldWord16$fToFieldWord8 $fToFieldWord$fToFieldInt64$fToFieldInt32$fToFieldInt16 $fToFieldInt8$fToFieldInteger $fToFieldInt$fToFieldFloat$fToFieldDouble $fToFieldChar$fToFieldMaybe$fSemigroupParser$fMonadPlusParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fMonadParser $fFromField[]$fFromFieldText$fFromFieldText0$fFromFieldByteString$fFromFieldByteString0$fFromFieldWord64$fFromFieldWord32$fFromFieldWord16$fFromFieldWord8$fFromFieldWord$fFromFieldInt64$fFromFieldInt32$fFromFieldInt16$fFromFieldInt8$fFromFieldInteger$fFromFieldInt$fFromFieldFloat$fFromFieldDouble$fFromFieldChar $fFromField()$fFromFieldMaybe$fFromRecordVector$fFromRecordVector0$fFromRecord[]$fFromRecord(,,,,,,)$fFromRecord(,,,,,)$fFromRecord(,,,,)$fFromRecord(,,,)$fFromRecord(,,)$fFromRecord(,)$fFromRecordOnly$fFromNamedRecordMap$fGFromRecordSum:+:r$fGFromNamedRecordM1$fGFromRecordM1$fGFromRecordProdK1Vector$fGFromRecordProdM1Vector$fGFromRecordProd:*:r$fGFromRecordProdU1r$fGFromRecordSumM1r$fGFromRecordProdM1Map$fGToRecordM1(,)$fGToRecordK1ByteString$fGToRecordM1ByteString$fGToRecordM1f$fGToRecordM1f0$fGToRecord:+:f$fGToRecord:*:f$fGToRecordU1f$fToNamedRecordMap$fToRecordVector$fToRecordVector0 $fToRecord[]$fToRecord(,,,,,,)$fToRecord(,,,,,)$fToRecord(,,,,)$fToRecord(,,,)$fToRecord(,,) $fToRecord(,)$fToRecordOnly $fEqNamed $fShowNamed $fReadNamed $fOrdNamed$fEqOnly $fOrdOnly $fReadOnly $fShowOnlyMapRowRow CSVSettingscsvSep csvQuoteChardefCSVSettings$fDefaultCSVSettings$fReadCSVSettings$fShowCSVSettings$fEqCSVSettingsparseCSVparseRowcsvrowCSVrowToStrintoCSVfromCSV writeHeaders readCSVFile decodeCSV writeCSVFile mapCSVFile transformCSV transformCSV' $fCSVsNamed $fCSVsMap $fCSVsVector$fCSVByteString[]$fCSVByteString[]0 $fCSVText[]$fCSVByteString[]1baseGHC.Base<>FPFormatExponentFixedGeneric floatToDigits GHC.Float RealFloati2ddecimal realFloatSuccessFailureemptymzerofailbytestring-0.10.8.2Data.ByteString.Internal ByteString&vector-0.12.0.3-ChzWbiXyvuNAQj0dcU08Sg Data.Vector! Data.EitherLeftRight GHC.MaybeNothingData.ByteStringJust text-1.2.3.1Data.Text.InternalTextStringMonad sinkVector