úÎF‰@·1      !"#$%&'()*+,-./0None%&2IJThis just actually a specialization of the free applicative. Check out Control.Applicative.Free in the free¯ library to learn more about this. The meanings of the fields are documented slightly more in the source code. Unfortunately, haddock does not play nicely with GADTs..Error occurred parsing the document into cellsError decoding the content Wrong number of cells in the rowÒThree parts: (a) Multiple header cells matched the same expected cell, (b) Headers that were missing, (c) Missing headers that were lambdas. They cannot be shown so instead their positions in the  are given.,Not enough cells in header, expected, actual -Error decoding unicode content, column number      None2OT1%Strict in the spine and in the values2 Maps over a  Decolonnadew that expects headers, converting these expected headers into the indices of the columns that they correspond to.3ÂThis implementation is definitely suboptimal. A better option (which would waste a little space but would be much faster) would be to build the new bytestring by writing to a buffer directly.4Specialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.5å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 6¥ parser in combination with this parser. row :: Word8 -- ^ Field delimiter -> AL.Parser (Vector ByteString) row !delim = rowNoNewline delim <* endOfLine {- INLINE row -}}rowNoNewline :: Word8 -- ^ Field delimiter -> AL.Parser (Vector ByteString) rowNoNewline !delim = V.fromList  $! field delim 4 delim {- INLINE rowNoNewline -}kremoveBlankLines :: [Vector ByteString] -> [Vector ByteString] removeBlankLines = filter (not . blankLine)ÿOParse a field. The field may be in either the escaped or non-escaped format. The return value is unescaped. This parser will consume the comma that comes after a field but not a newline that follows a field. If we are positioned at a newline when it starts, that newline will be consumed and we return CellResultNewline.7yConsume an unescaped field. If it ends with a newline, leave that in tact. If it ends with a comma, consume the comma.8XThis could be improved. We could avoid the builder and just write to a buffer directly.9,Is this an empty record (i.e. a blank line)?: A version of ;3 that is strict in the result of its first action.6(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'.(hThis adds one to the index because text editors consider line number to be one-based, not zero-based.<rYou must pass the length of the list and as the first argument. Passing the wrong length will lead to an error.=This function uses  unsafeIndex to access elements of the >.?FThis function does not check to make sure that the indicies in the  Decolonnade are in the >p. Only use this if you have already verified that none of the indices in the siphon are out of the bounds.G1@ABCDEFGHIJKLMNOPQRSTUVW& encoded csv'X separatornewlineY separatornewlineZ[ separatornewline2Headers in the source document*Decolonnade that contains expected headers\34Field delimiter5]^7_89:6`abc(defghijk'index of first row, usually zero or oneRequired row lengthlmtrue if null string!true if termination is acceptablenNTrue if termination is acceptable. False if it is because of a decoding error.'index of first row, usually zero or oneRequired row length<o=?pq)*+,- &'()*+ &'(*)+61@ABCDEFGHIJKLMNOPQRSTUVW&'XYZ[2\345]^7_89:6`abc(defghijklmn<o=?pq)*+,-r       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFGHIJKKLLMNOPQRSTUUVWXYZ[\]^_`abcdefghijklmnopq!siphon-0.7-5lPZLk42Rv63PsoxTS1JyG Siphon.TypesSiphon SiphonPureSiphonApRowError RowErrorParseRowErrorDecode RowErrorSizeRowErrorHeadersRowErrorHeaderSizeRowErrorMalformed SiphonErrorsiphonErrorRowsiphonErrorCauseIndexed indexedIndex CellErrorcellErrorColumncellErrorContent$fApplicativeSiphon$fFunctorSiphon$fExceptionSiphonError$fShowCellError$fReadCellError $fEqCellError $fEqIndexed $fOrdIndexed$fFunctorIndexed $fShowIndexed $fReadIndexed$fShowRowError$fReadRowError $fEqRowError$fShowSiphonError$fReadSiphonError$fEqSiphonErrordecodeHeadedUtf8CsvencodeHeadedUtf8CsvhumanizeSiphonErrorheadlessheadedindexed$fApplicativeEitherWrap$fMonoidHeaderErrors $fShowEnded$fShowCellResult$fFunctorEitherWrap StrictListheadedToIndexed escapeAlways sepByDelim1'field endOfLineunescapedFieldunescape blankLineliftM2'baseGHC.BaseliftM2reverseVectorStrictListuncheckedRunWithRow&vector-0.12.0.1-BtK5bVORdhu8bC6gqUfFYi Data.VectorVector uncheckedRun StrictListNilStrictListCons EitherWrap getEitherWrap TrailCharTrailCharNewlineTrailCharComma TrailCharEnd HeaderErrors IndexedHeaderindexedHeaderIndexedindexedHeaderHeader CellResultCellResultDataCellResultNewlineEndedEndedYesEndedNoEscaped getEscapedencodeHeadedCsv encodeHeader mapStreamM encodeRows escapeChar8 eatNewlines escapedFielddquote doubleQuotenewlinecrcommaprettyRowErrorprettyCellErrorsprettyNamedMissingHeadersprettyHeadingErrorscolumnNumToLettersmapLeftconsumeHeaderRowUtf8consumeBodyUtf8 utf8ToStrconsumeHeaderRow consumeBody skipWhile siphonLengthmaxIndex