generic-data-functions-0.3.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.

We use Alternative to handle "which constructor" checking on the term level.

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 (opts :: SumOpts) cd tag gf where Source #

Methods

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

Instances

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

Defined in Generic.Data.Function.Traverse.Sum

Methods

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

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

Defined in Generic.Data.Function.Traverse.Sum

Methods

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

(GenericTraverseSum tag, GTraverseCSum cd tag (C1 cc gf), Datatype cd, Alternative (GenericTraverseF tag), Monad (GenericTraverseF tag)) => GTraverseSum 'AllowSingletonSum (cd :: k2) (tag :: k1) (C1 cc gf :: k3 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

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

(GenericTraverseSum tag, GTraverseCSum cd tag (l :+: r), Datatype cd, Alternative (GenericTraverseF tag), Monad (GenericTraverseF tag)) => GTraverseSum opts (cd :: k2) (tag :: k1) (l :+: r :: k3 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

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

gTraverseSum' :: forall {p} cd tag gf pt. (GenericTraverseC tag pt, Alternative (GenericTraverseF tag), Monad (GenericTraverseF tag), GenericTraverseSum tag, GTraverseCSum cd tag gf, Datatype cd) => PfxTagCfg pt -> GenericTraverseF tag (gf p) Source #

class GTraverseCSum cd tag gf where Source #

Methods

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

Instances

Instances details
(Alternative (GenericTraverseF tag), GTraverseCSum cd tag l, GTraverseCSum cd tag r) => GTraverseCSum (cd :: k2) (tag :: k1) (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 cd cc 0 tag gf, Constructor cc) => GTraverseCSum (cd :: k2) (tag :: k1) (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 #