generic-data-functions-0.2.0: Familiar functions lifted to generic data types
Safe HaskellSafe-Inferred
LanguageGHC2021

Generic.Data.Function.Traverse.Sum

Synopsis

Documentation

class (GenericTraverse f, Alternative f, Monad f) => GenericTraverseSum f where Source #

Sum type monads that can be generically traversed.

For sum types, we require a monad with choice to differentiate constructors.

Methods

genericTraverseSumPfxTagAction Source #

Arguments

:: 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 #

Arguments

:: String

data type name

-> [String]

non-matching constructor names

-> Text

prefix tag, prettified

-> f a 

Parse error due to no constructor matching the parsed prefix tag.

Relevant metadata is provided as arguments.

data PfxTagCfg a Source #

How to use a type as a prefix tag in a generic sum type parser.

Constructors

PfxTagCfg 

Fields

  • pfxTagCfgFromCstr :: String -> a

    How to turn a constructor name into a prefix tag.

  • pfxTagCfgEq :: a -> a -> Bool

    How to compare prefix tags for equality.

    By shoving this into our generic derivation config, we can avoid adding an insidious Eq constraint. In general, you will want to set this to (==).

  • pfxTagCfgShow :: a -> Text

    Make a prefix tag human-readable. show is often appropriate.

class GTraverseSum (opts :: SumOpts) cd f f' where Source #

Methods

gTraverseSum :: GenericTraverseC f pt => PfxTagCfg pt -> f (f' p) Source #

Instances

Instances details
GTraverseSum opts (cd :: k1) f (V1 :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f (V1 p) Source #

(GenericTraverseSum f, GTraverseCSum cd f (C1 cc f'), Datatype cd) => GTraverseSum 'AllowSingletonSum (cd :: k1) f (C1 cc f' :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f (C1 cc f' p) Source #

GTraverseSum 'SumOnly (cd :: k1) f (C1 cc f' :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f (C1 cc f' p) Source #

(GenericTraverseSum f, GTraverseCSum cd f (l :+: r), Datatype cd) => GTraverseSum opts (cd :: k1) f (l :+: r :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k). GenericTraverseC f pt => PfxTagCfg pt -> f ((l :+: r) p) Source #

gTraverseSum' :: forall {p} cd f f' pt. (GenericTraverseC f pt, GenericTraverseSum f, GTraverseCSum cd f f', Datatype cd) => PfxTagCfg pt -> f (f' p) Source #

class GTraverseCSum cd f f' where Source #

Generic getter (constructor sum level).

Methods

gTraverseCSum :: PfxTagCfg pt -> pt -> f (f' p) Source #

Instances

Instances details
(Functor f, Alternative f, GTraverseCSum cd f l, GTraverseCSum cd f r) => GTraverseCSum (cd :: k1) (f :: Type -> Type) (l :+: r :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

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 # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseCSum :: forall pt (p :: k). PfxTagCfg pt -> pt -> f (C1 cc f' p) Source #