Safe Haskell | None |
---|---|
Language | GHC2021 |
Freckle.App.Csv
Description
Stream, parse, and validate CSVs
A minor extension of cassava.
Using MonadValidate
and Conduit
.
Synopsis
- csvWithValidationSink :: forall a b err m. (MonadThrow m, MonadUnliftIO m, PrimMonad m, ValidateHeader a, FromNamedRecord a) => ConduitT () ByteString (ResourceT m) () -> (Vector a -> Validate (NonEmpty (CsvException err)) (Vector b)) -> m (Validate (NonEmpty (CsvException err)) (Vector b))
- csvWithParserAndValidationSink :: forall a b err m. (MonadThrow m, MonadUnliftIO m, PrimMonad m) => (Header -> Validate (NESeq String) ()) -> (NamedRecord -> Parser a) -> ConduitT () ByteString (ResourceT m) () -> (Vector a -> Validate (NonEmpty (CsvException err)) (Vector b)) -> m (Validate (NonEmpty (CsvException err)) (Vector b))
- runCsvConduit :: forall r m err. MonadUnliftIO m => ConduitT () Void (ValidateT (Seq (CsvException err)) (ResourceT m)) r -> m (Either (Seq (CsvException err)) r)
- decodeCsv :: forall a (m :: Type -> Type) err. (MonadThrow m, MonadValidate (Seq (CsvException err)) m, ValidateHeader a, FromNamedRecord a) => ConduitT ByteString a m ()
- class ValidateHeader (a :: k)
- validateHeader :: forall (m :: Type -> Type) proxy. (ValidateHeader a, Bind m, Monad m) => proxy a -> Header -> ValidateT (NESeq String) m ()
- hasHeader :: forall (m :: Type -> Type). Monad m => Header -> Name -> ValidateT (NESeq String) m ()
- defaultValidateOrderedHeader :: forall a proxy (m :: Type -> Type). (DefaultOrdered a, Monad m) => proxy a -> Header -> ValidateT (NESeq String) m ()
- data CsvException a
- defaultOptions :: Options
Documentation
csvWithValidationSink Source #
Arguments
:: forall a b err m. (MonadThrow m, MonadUnliftIO m, PrimMonad m, ValidateHeader a, FromNamedRecord a) | |
=> ConduitT () ByteString (ResourceT m) () | CSV as a byte stream |
-> (Vector a -> Validate (NonEmpty (CsvException err)) (Vector b)) | Validation to apply to resulting rows |
-> m (Validate (NonEmpty (CsvException err)) (Vector b)) |
Stream parse a CSV
- Expects UTF-8
- Provides incremental validation
csvWithParserAndValidationSink Source #
Arguments
:: forall a b err m. (MonadThrow m, MonadUnliftIO m, PrimMonad m) | |
=> (Header -> Validate (NESeq String) ()) | |
-> (NamedRecord -> Parser a) | Custom record parser |
-> ConduitT () ByteString (ResourceT m) () | CSV as a byte stream |
-> (Vector a -> Validate (NonEmpty (CsvException err)) (Vector b)) | Validation to apply to resulting rows |
-> m (Validate (NonEmpty (CsvException err)) (Vector b)) |
Stream parse a CSV with a custom parser
- Expects UTF-8
- Provides incremental validation
Conduit Primitives
runCsvConduit :: forall r m err. MonadUnliftIO m => ConduitT () Void (ValidateT (Seq (CsvException err)) (ResourceT m)) r -> m (Either (Seq (CsvException err)) r) Source #
Run a CSV conduit handling invalid UTF8
decodeCsv :: forall a (m :: Type -> Type) err. (MonadThrow m, MonadValidate (Seq (CsvException err)) m, ValidateHeader a, FromNamedRecord a) => ConduitT ByteString a m () Source #
Stream in ByteString
s and parse records in constant space
Header Validation
class ValidateHeader (a :: k) Source #
Minimal complete definition
validateHeader :: forall (m :: Type -> Type) proxy. (ValidateHeader a, Bind m, Monad m) => proxy a -> Header -> ValidateT (NESeq String) m () Source #
hasHeader :: forall (m :: Type -> Type). Monad m => Header -> Name -> ValidateT (NESeq String) m () Source #
defaultValidateOrderedHeader :: forall a proxy (m :: Type -> Type). (DefaultOrdered a, Monad m) => proxy a -> Header -> ValidateT (NESeq String) m () Source #
Exceptions
data CsvException a Source #
Constructors
CsvMissingColumn !Text | |
CsvParseException !Int !Text | |
CsvFileNotFound | |
CsvUnknownFileEncoding | |
CsvExceptionExtension a | A constructor for providing extensible csv exceptions |
Instances
ToJSON a => ToJSON (CsvException a) Source # | |
Defined in Freckle.App.Csv Methods toJSON :: CsvException a -> Value # toEncoding :: CsvException a -> Encoding # toJSONList :: [CsvException a] -> Value # toEncodingList :: [CsvException a] -> Encoding # omitField :: CsvException a -> Bool # | |
Show a => Show (CsvException a) Source # | |
Defined in Freckle.App.Csv Methods showsPrec :: Int -> CsvException a -> ShowS # show :: CsvException a -> String # showList :: [CsvException a] -> ShowS # | |
Eq a => Eq (CsvException a) Source # | |
Defined in Freckle.App.Csv Methods (==) :: CsvException a -> CsvException a -> Bool # (/=) :: CsvException a -> CsvException a -> Bool # |