úÎ7Í4*F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDE SafeNone   None Â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. Specialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.Specialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.å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 ) 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.XThis could be improved. We could avoid the builder and just write to a buffer directly.A strict version of   for monads.,Is this an empty record (i.e. a blank line)? A version of liftM23 that is strict in the result of its first action.(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'. Field delimiterField delimiterField delimiter   None"¼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 text by writing to a buffer directly.#Specialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.$Specialized version of sepBy1'> which is faster due to not accepting an arbitrary separator.%å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 /) 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.-A strict version of   for monads.. A version of liftM23 that is strict in the result of its first action./(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'. !"#Field delimiter$%Field delimiter&Field delimiter'()*+,-./01234 !"#$%&'()*+,-./01234 !"#$%&'()*+,-./01234 !"#$%&'()*+,-./01234- None  None5678567856785678NoneIN:0This is a convenience function for working with  pipes-text3. It will convert a UTF-8 decoding error into a F3, so the pipes can be properly chained together.;7This is seldom useful but is included for completeness. 9:;<=>expected length of each row'index of first row, usually zero or one?@'index of first row, usually zero or one&leftovers that should be handled firstA 9:;<=>?@A 9:;<=>?@A 9:;<=>?@ANoneBCDEBCDEBCDEBCDE SafeG     !"#$%&'() "#*$%&'+,-./01-23456789:sipho_Hdj6UCavz4ZAJcBjxxqSWQ Siphon.TypesSiphon.InternalSiphon.Internal.TextSiphon.EncodingSiphon.Decoding Siphon.TextSiphon.ByteString.Char8 Data.Functor<$>Siphon.ContentSiphon siphonEscapesiphonIntercalatesiphonParseRow siphonNullEscaped getEscapedbyteStringChar8 encodeRowescape escapeAlways sepByDelim1'sepByEndOfLine1'row rowNoNewlineremoveBlankLinesfield escapedFieldunescapedFielddquoteunescape<$!> blankLineliftM2' endOfLine doubleQuotenewlinecrcommatextescapedFieldInnertextDoubleQuoteheaderpipe headedPipe mkParseErrorconvertDecodeError headlessPipe indexedPipe uncheckedPipeconsumeGeneral pipeGeneral awaitSkipsiphoncolon_83GcTcFG3YpCQXWR88wxWoColonnade.TypesDecodingRowError