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

Generic.Data.Function.Traverse.Sum

Description

traverse over generic sum types.

Disambiguates constructors by prepending sum tags.

Note that the sum tag approach has efficiency limitations. You may design a constructor disambiguation schema which permits "incrementally" parsing, rather than parsing some whole thing then comparing to each option, which will be faster. If you wish to perform such sum tag handling yourself, but still want the free generics, Generic.Data.FOnCstr can do this for you.

Documentation

class GTraverseSum tag sumtag gf where Source #

Methods

gTraverseSum :: ParseCstrTo sumtag pt -> (String -> GenericTraverseF tag pt) -> (forall a. String -> GenericTraverseF tag a) -> (pt -> pt -> Bool) -> GenericTraverseF tag (gf p) Source #

Instances

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

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k20). ParseCstrTo sumtag pt -> (String -> GenericTraverseF tag pt) -> (forall a. String -> GenericTraverseF tag a) -> (pt -> pt -> Bool) -> GenericTraverseF tag (V1 p) Source #

(f ~ GenericTraverseF tag, Alternative f, Monad f, KnownSymbol dtName, GTraverseCSum tag sumtag dtName gf) => GTraverseSum (tag :: k1) (sumtag :: k2) (D1 ('MetaData dtName _md2 _md3 _md4) gf :: k3 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseSum :: forall pt (p :: k20). ParseCstrTo sumtag pt -> (String -> GenericTraverseF tag pt) -> (forall a. String -> GenericTraverseF tag a) -> (pt -> pt -> Bool) -> GenericTraverseF tag (D1 ('MetaData dtName _md2 _md3 _md4) gf p) Source #

class GTraverseCSum tag sumtag (dtName :: Symbol) gf where Source #

Methods

gTraverseCSum :: ParseCstrTo sumtag pt -> (pt -> pt -> Bool) -> pt -> GenericTraverseF tag (gf p) Source #

Instances

Instances details
(Alternative (GenericTraverseF tag), GTraverseCSum tag sumtag dtName l, GTraverseCSum tag sumtag dtName r) => GTraverseCSum (tag :: k1) (sumtag :: k2) dtName (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). ParseCstrTo sumtag pt -> (pt -> pt -> Bool) -> pt -> GenericTraverseF tag ((l :+: r) p) Source #

(Alternative (GenericTraverseF tag), GTraverseC tag dtName cstrName 0 gf, ReifyCstrParseResult sumtag cstrParsed, ForceGCParse dtName cstr (ParseCstr sumtag cstrName) ~ cstrParsed) => GTraverseCSum (tag :: k1) (sumtag :: k3) dtName (C1 ('MetaCons cstrName _mc2 _mc3) gf :: k2 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Sum

Methods

gTraverseCSum :: forall pt (p :: k20). ParseCstrTo sumtag pt -> (pt -> pt -> Bool) -> pt -> GenericTraverseF tag (C1 ('MetaCons cstrName _mc2 _mc3) gf p) Source #