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

Generic.Data.Function.Traverse.Sum

Synopsis

Documentation

class GenericTraverse tag => GenericTraverseSum tag where Source #

Sum type monads that can be generically traversed.

Methods

genericTraverseSumPfxTagAction Source #

Arguments

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

Arguments

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

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 tag gf where Source #

Methods

gTraverseSum :: GenericTraverseC tag pt => PfxTagCfg pt -> GenericTraverseF tag (gf p) Source #

Instances

Instances details
GenericTraverse tag => GTraverseSum (tag :: k1) (V1 :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k10). GenericTraverseC tag pt => PfxTagCfg pt -> GenericTraverseF tag (V1 p) Source #

(Alternative (GenericTraverseF tag), Monad (GenericTraverseF tag), GenericTraverseSum tag, GTraverseCSum tag cd gf, Datatype cd, KnownSymbols (CstrNames gf)) => GTraverseSum (tag :: k1) (D1 cd gf :: k2 -> Type) Source #

Test all constructors of the given non-void data type; if they all fail, run a failure action and pass it all the constructors names in the type.

Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k10). GenericTraverseC tag pt => PfxTagCfg pt -> GenericTraverseF tag (D1 cd gf p) Source #

class GTraverseCSum tag cd gf where Source #

Methods

gTraverseCSum :: PfxTagCfg pt -> pt -> GenericTraverseF tag (gf p) Source #

Instances

Instances details
(Alternative (GenericTraverseF tag), GTraverseCSum tag cd l, GTraverseCSum tag cd r) => GTraverseCSum (tag :: k1) (cd :: k2) (l :+: r :: k3 -> Type) Source #

Combine constructor options with (<|>) ("or").

Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseCSum :: forall pt (p :: k20). PfxTagCfg pt -> pt -> GenericTraverseF tag ((l :+: r) p) Source #

(Alternative (GenericTraverseF tag), GTraverseC tag cd cc 0 gf, Constructor cc) => GTraverseCSum (tag :: k1) (cd :: k2) (C1 cc gf :: k3 -> Type) Source #

If the constructor matches the expected prefix tag, then return the action handling that constructor's contents, else return the empty action.

Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseCSum :: forall pt (p :: k20). PfxTagCfg pt -> pt -> GenericTraverseF tag (C1 cc gf p) Source #