Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Synopsis
- class (GenericTraverse f, Alternative f, Monad f) => GenericTraverseSum f where
- genericTraverseSumPfxTagAction :: GenericTraverseC f pt => String -> f pt
- genericTraverseSumNoMatchingCstrAction :: String -> [String] -> Text -> f a
- data PfxTagCfg a = PfxTagCfg {
- pfxTagCfgFromCstr :: String -> a
- pfxTagCfgEq :: a -> a -> Bool
- pfxTagCfgShow :: a -> Text
- class GTraverseSum f f' where
- gTraverseSum :: GenericTraverseC f pt => PfxTagCfg pt -> f (f' p)
- class GTraverseSum' cd f f' where
- gTraverseSum' :: GenericTraverseC f pt => PfxTagCfg pt -> f (f' p)
- class GTraverseCSum cd f f' where
- gTraverseCSum :: PfxTagCfg pt -> pt -> f (f' p)
Documentation
class (GenericTraverse f, Alternative f, Monad f) => GenericTraverseSum f where Source #
Sum type monads that can be generically traverse
d.
For sum types, we require a monad with choice to differentiate constructors.
genericTraverseSumPfxTagAction Source #
:: GenericTraverseC f pt | |
=> String | data type name |
-> f pt |
Try to parse a prefix tag of type pt
.
Relevant metadata is provided as arguments.
genericTraverseSumNoMatchingCstrAction Source #
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 | |
|
class GTraverseSum f f' where Source #
gTraverseSum :: GenericTraverseC f pt => PfxTagCfg pt -> f (f' p) Source #
Instances
(Functor f, GTraverseSum' cd f f') => GTraverseSum f (D1 cd f' :: k -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.Sum gTraverseSum :: forall pt (p :: k0). GenericTraverseC f pt => PfxTagCfg pt -> f (D1 cd f' p) Source # |
class GTraverseSum' cd f f' where Source #
gTraverseSum' :: GenericTraverseC f pt => PfxTagCfg pt -> f (f' p) Source #
Instances
(TypeError ENoEmpty :: Constraint) => GTraverseSum' (cd :: k1) f (V1 :: k2 -> Type) Source # | Refuse to derive an instance for an empty data type. |
Defined in Generic.Data.Function.Traverse.Sum gTraverseSum' :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f (V1 p) Source # | |
(GenericTraverseSum f, GTraverseCSum cd f (l :+: r), Datatype cd) => GTraverseSum' (cd :: k1) f (l :+: r :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.Sum gTraverseSum' :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f ((l :+: r) p) Source # | |
(TypeError EUnexpectedNonSum :: Constraint) => GTraverseSum' (cd :: k1) f (C1 cc f' :: k2 -> Type) Source # | Refuse to derive a non-sum instance if we expected a sum data type. |
Defined in Generic.Data.Function.Traverse.Sum gTraverseSum' :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f (C1 cc f' p) Source # |
class GTraverseCSum cd f f' where Source #
Generic getter (constructor sum level).
gTraverseCSum :: PfxTagCfg pt -> pt -> f (f' p) Source #
Instances
(Functor f, Alternative f, GTraverseCSum cd f l, GTraverseCSum cd f r) => GTraverseCSum (cd :: k1) (f :: Type -> Type) (l :+: r :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.Sum gTraverseCSum :: forall pt (p :: k). PfxTagCfg pt -> pt -> f ((l :+: r) p) Source # | |
(Alternative f, GTraverseC cd cc 0 f f', Constructor cc) => GTraverseCSum (cd :: k1) (f :: Type -> Type) (C1 cc f' :: k2 -> Type) Source # | |
Defined in Generic.Data.Function.Traverse.Sum gTraverseCSum :: forall pt (p :: k). PfxTagCfg pt -> pt -> f (C1 cc f' p) Source # |