Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Synopsis
- class GenericTraverse tag where
- type GenericTraverseF tag :: Type -> Type
- type GenericTraverseC tag a :: Constraint
- genericTraverseAction :: GenericTraverseC tag a => String -> String -> Maybe String -> Natural -> GenericTraverseF tag a
- genericTraverseNonSum :: forall {cd} {gf} asserts tag a. (Generic a, Rep a ~ D1 cd gf, GTraverseNonSum cd tag gf, ApplyGCAsserts asserts tag, Functor (GenericTraverseF tag)) => GenericTraverseF tag a
- class GTraverseNonSum (cd :: Meta) tag gf
- class GenericTraverse tag => GenericTraverseSum tag where
- genericTraverseSumPfxTagAction :: GenericTraverseC tag pt => String -> GenericTraverseF tag pt
- genericTraverseSumNoMatchingCstrAction :: String -> [String] -> Text -> GenericTraverseF tag a
- data PfxTagCfg a = PfxTagCfg {
- pfxTagCfgFromCstr :: String -> a
- pfxTagCfgEq :: a -> a -> Bool
- pfxTagCfgShow :: a -> Text
- genericTraverseSum :: forall {cd} {gf} opts asserts tag a pt. (Generic a, Rep a ~ D1 cd gf, GTraverseSum opts cd tag gf, ApplyGCAsserts asserts tag, GenericTraverseC tag pt, Functor (GenericTraverseF tag)) => PfxTagCfg pt -> GenericTraverseF tag a
- class GTraverseSum (opts :: SumOpts) cd tag gf
- eqShowPfxTagCfg :: (Eq a, Show a) => (String -> a) -> PfxTagCfg a
Documentation
class GenericTraverse tag where Source #
Implementation enumeration type class for generic traverse
.
The type variable is uninstantiated, used purely as a tag.
Avoid orphan instances by defining custom empty types to use here. See the binrep library on Hackage for an example.
type GenericTraverseF tag :: Type -> Type Source #
The target Applicative
to traverse
to.
type GenericTraverseC tag a :: Constraint Source #
The type class providing the action in traverse
for permitted types.
genericTraverseAction Source #
:: GenericTraverseC tag a | |
=> String | data type name |
-> String | constructor name |
-> Maybe String | record name (if present) |
-> Natural | field index |
-> GenericTraverseF tag a |
The action in traverse
(first argument).
We include data type metadata because this function is useful for monadic parsers, which can record it in error messages. (We don't do it for foldMap because it's pure.)
Instances
GenericTraverse (EmptyRec0 f :: Type) Source # |
Note that one may write a valid instance using a |
Defined in Generic.Data.Function.Traverse.Constructor type GenericTraverseF (EmptyRec0 f) :: Type -> Type Source # type GenericTraverseC (EmptyRec0 f) a Source # genericTraverseAction :: GenericTraverseC (EmptyRec0 f) a => String -> String -> Maybe String -> Natural -> GenericTraverseF (EmptyRec0 f) a Source # | |
GenericTraverse (NoRec0 f :: Type) Source # |
|
Defined in Generic.Data.Function.Traverse.Constructor type GenericTraverseF (NoRec0 f) :: Type -> Type Source # type GenericTraverseC (NoRec0 f) a Source # genericTraverseAction :: GenericTraverseC (NoRec0 f) a => String -> String -> Maybe String -> Natural -> GenericTraverseF (NoRec0 f) a Source # |
genericTraverseNonSum :: forall {cd} {gf} asserts tag a. (Generic a, Rep a ~ D1 cd gf, GTraverseNonSum cd tag gf, ApplyGCAsserts asserts tag, Functor (GenericTraverseF tag)) => GenericTraverseF tag a Source #
Generic traverse
over a term of non-sum data type f a
.
class GTraverseNonSum (cd :: Meta) tag gf Source #
Instances
GTraverseNonSum cd (tag :: k1) (V1 :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.NonSum gTraverseNonSum :: forall (p :: k10). GenericTraverseF tag (V1 p) Source # | |
GTraverseNonSum cd (tag :: k1) (l :+: r :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.NonSum gTraverseNonSum :: forall (p :: k10). GenericTraverseF tag ((l :+: r) p) Source # | |
(Functor (GenericTraverseF tag), GTraverseC cd cc 0 tag gf) => GTraverseNonSum cd (tag :: k1) (C1 cc gf :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.NonSum gTraverseNonSum :: forall (p :: k10). GenericTraverseF tag (C1 cc gf p) Source # |
class GenericTraverse tag => GenericTraverseSum tag where Source #
Sum type monads that can be generically traverse
d.
We use Alternative
to handle "which constructor" checking on the term level.
genericTraverseSumPfxTagAction Source #
:: GenericTraverseC tag pt | |
=> String | data type name |
-> GenericTraverseF tag pt |
Try to parse a prefix tag of type pt
.
Relevant metadata is provided as arguments.
genericTraverseSumNoMatchingCstrAction Source #
:: String | data type name |
-> [String] | non-matching constructor names |
-> Text | prefix tag, prettified |
-> GenericTraverseF tag a |
Parse error due to no constructor matching the parsed prefix tag.
Relevant metadata is provided as arguments.
How to use a type as a prefix tag in a generic sum type parser.
PfxTagCfg | |
|
genericTraverseSum :: forall {cd} {gf} opts asserts tag a pt. (Generic a, Rep a ~ D1 cd gf, GTraverseSum opts cd tag gf, ApplyGCAsserts asserts tag, GenericTraverseC tag pt, Functor (GenericTraverseF tag)) => PfxTagCfg pt -> GenericTraverseF tag a Source #
Generic traverse
over a term of sum data type f a
.
You must provide a configuration for how to handle constructors.
class GTraverseSum (opts :: SumOpts) cd tag gf Source #