-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A CSV toolkit based on cassava and enum-text
--
-- Please see the README on GitHub at
-- https://github.com/cdornan/columnar#readme
@package columnar
@version 1.0.0.0
module Text.Columnar
-- | a columnar type enumerates the columns of a CSV/table; it is just an
-- EnumText with options for CSV codecs and the table generators
class EnumText c => Columnar c
columnOptions :: Columnar c => ColumnOptions c
data ColumnOptions c
ColumnOptions :: IsNamed -> EncodeOptions -> DecodeOptions -> WithColHeader -> (RowNo -> c -> Builder -> Builder) -> ColumnOptions c
-- | encoding CSV with headers?
[_co_csv_nmd] :: ColumnOptions c -> IsNamed
-- | Cassava encode options
[_co_csv_eos] :: ColumnOptions c -> EncodeOptions
-- | Cassava decode options
[_co_csv_dos] :: ColumnOptions c -> DecodeOptions
-- | teabular: include a header line
[_co_col_hdr] :: ColumnOptions c -> WithColHeader
-- | teabular: field formatters
[_co_col_fmt] :: ColumnOptions c -> RowNo -> c -> Builder -> Builder
-- | are we generating/expecting a header for CSVs
data IsNamed
-- | we are generating and expecting headers
Named :: IsNamed
-- | we are not generating headers but possibly skipping them on read
Positional :: HasHeader -> IsNamed
-- | are we generating/expecting a header for tabular data
data WithColHeader
WithColHeader :: WithColHeader
WithoutColHeader :: WithColHeader
-- | which Row is being formatted
newtype RowNo
RowNo :: Int -> RowNo
[_RowNo] :: RowNo -> Int
-- | the header is row 0, first data row is 1
headerRowNo :: RowNo
-- | the header is row 0, first data row is 1
firstRowNo :: RowNo
-- | the list of valid RowNo, starting with the first row (NOT the header)
rowNoSupply :: [RowNo]
defaultPositionalColumnOptions :: ColumnOptions c
defaultColumnOptions :: ColumnOptions c
-- | IsRecord combines the column type with the record type, each record
-- type determining the column type and vice versa
class Columnar c => IsRecord r c | r -> c, c -> r
zeroRecord :: IsRecord r c => r
fieldMethods :: IsRecord r c => c -> FieldMethods r c
-- | IsRecord combines the column type with the record type, each record
-- type determining the column type and vice versa
class (Monoid r, IsRecord r c) => IsMonoidalRecord r c
monoidalFieldMethods :: IsMonoidalRecord r c => c -> MonoidalFieldMethods r c
-- | for each column we need a lens the field of the record, which must be
-- Buildable and TextParsable
data FieldMethods r c
FieldMethods :: Lens' r f -> FieldMethods r c
[_fm_lens] :: FieldMethods r c -> Lens' r f
-- | if we need monoidal records then the fields must be Monoidal too.
data MonoidalFieldMethods r c
MonoidalFieldMethods :: Lens' r f -> MonoidalFieldMethods r c
[_mfm_lens] :: MonoidalFieldMethods r c -> Lens' r f
-- | a record set contains the ColumnOptions along with the vector of
-- records
data Records r c
Records :: ColumnOptions c -> Vector r -> Records r c
[_recs_options] :: Records r c -> ColumnOptions c
[_recs_vector] :: Records r c -> Vector r
class (IsRecord r c, Coercible m (IntMap r)) => IsRecordIntMap r c m | r -> c, c -> r, r -> m, m -> r
recordKey :: IsRecordIntMap r c m => r -> Int
-- | encoding to an Intmap
encodeRecordMap :: forall r c m. IsRecordIntMap r c m => m -> ByteString
-- | decoding into an Intmap
decodeRecordMap :: forall r c m. IsRecordIntMap r c m => ByteString -> Possibly m
-- | often we will want to construct a Monoid Intmap from Monoid records
memptyRecordMap :: forall r c m. (Monoid r, IsRecordIntMap r c m) => m
-- | often we will want to construct a Monoid Intmap from Monoid records
mappendRecordMap :: forall r c m. (Monoid r, IsRecordIntMap r c m) => m -> m -> m
-- | provide evidence that Map is well formed
summarizeMap :: forall r c m. IsRecordIntMap r c m => m -> Text
class (IsRecord r c, Coercible m (HashMap Text r)) => IsRecordHashMap r c m | r -> c, c -> r, r -> m, m -> r
recordTextKey :: IsRecordHashMap r c m => r -> Text
-- | encoding to an Intmap
encodeRecordHashMap :: forall r c m. IsRecordHashMap r c m => m -> ByteString
-- | decoding into an Intmap
decodeRecordHashMap :: forall r c m. IsRecordHashMap r c m => ByteString -> Possibly m
-- | often we will want to construct a Monoid HashMap from Monoid records
memptyRecordHashMap :: forall r c m. (Monoid r, IsRecordHashMap r c m) => m
-- | often we will want to construct a Monoid HashMap from Monoid records
mappendRecordHashMap :: forall r c m. (Monoid r, IsRecordHashMap r c m) => m -> m -> m
-- | provide evidence that HashMap is well formed
summarizeHashMap :: forall r c m. IsRecordHashMap r c m => m -> Text
newtype Row c
Row :: (c -> Builder) -> Row c
[_Row] :: Row c -> c -> Builder
-- | Rows are used for generating tabular output and do not need access to
-- any record type
data Rows c
Rows :: ColumnOptions c -> Vector (Row c) -> Rows c
[_rows_options] :: Rows c -> ColumnOptions c
[_rows_vector] :: Rows c -> Vector (Row c)
mkRows :: Columnar c => [Row c] -> Rows c
mkRowsWith :: ColumnOptions c -> [Row c] -> Rows c
getRows :: Rows c -> [Row c]
mkRow :: (c -> Builder) -> Row c
-- | sometimes we just need the column type, as with listColumns
data ColumnarIx c
ColumnarIx :: ColumnarIx c
listColumns :: Columnar c => ColumnarIx c -> [c]
-- | for constructing each field's FieldMethods
mkFieldMethods :: (TextParsable f, Buildable f) => Lens' r f -> FieldMethods r c
-- | for constructing each field's MonoidalFieldMethods
mkMonoidalFieldMethods :: (TextParsable f, Buildable f, Monoid f) => Lens' r f -> MonoidalFieldMethods r c
convertMonoidalFieldMethodsToFieldMethods :: MonoidalFieldMethods r c -> FieldMethods r c
constructRecordMappend :: (Bounded c, Enum c) => (c -> MonoidalFieldMethods r c) -> r -> r -> r
-- | encode the list of records as a Haskell list of strings, one line per
-- line, indented at two spaces
haskellRecords :: IsRecord r c => [r] -> Builder
mkRecords :: Columnar c => [r] -> Records r c
mkRecordsWith :: ColumnOptions c -> [r] -> Records r c
buildRecord :: forall r c. IsRecord r c => r -> Builder
encodeRecordsT :: forall r c. IsRecord r c => Records r c -> Text
encodeRecords :: forall r c. IsRecord r c => Records r c -> ByteString
decodeRecordsT :: IsRecord r c => Text -> Possibly (Records r c)
decodeRecords :: IsRecord r c => ByteString -> Possibly (Records r c)
parseRecord :: IsRecord r c => TextParser r
decodeRecordsWithT :: IsRecord r c => ColumnOptions c -> Text -> Possibly (Records r c)
decodeRecordsWith :: IsRecord r c => ColumnOptions c -> ByteString -> Possibly (Records r c)
recordsToRows :: IsRecord r c => Records r c -> Rows c
recordToRow :: IsRecord r c => r -> Row c
rowsToRecords :: forall r c. IsRecord r c => Rows c -> Possibly (Records r c)
rowToRecord :: forall r c. IsRecord r c => Row c -> Possibly r
encodeColumnarCsv :: forall c. Columnar c => Rows c -> ByteString
csvHeader :: Columnar c => ColumnarIx c -> Header
decodeColumnarCsv :: Columnar c => ByteString -> Possibly (Rows c)
decodeColumnarCsvWith :: Columnar c => ColumnOptions c -> ByteString -> Possibly (Rows c)
recordFields :: forall r c. IsRecord r c => [(ByteString, r -> ByteString)]
listRecords :: Columnar c => Records r c -> [r]
mkNamedRecord :: [(ByteString, a -> ByteString)] -> a -> NamedRecord
mkIntMap :: (a -> Int) -> [a] -> IntMap a