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

Generic.Data.Function.Traverse.Constructor

Synopsis

Documentation

class GenericTraverse tag where Source #

Implementation enumeration type class for generic traverse.

The type variable is uninstantiated, used purely as a tag. Good types include the type class used inside (providing you define the type class/it's not an orphan instance), or a custom void data type. See the binrep library on Hackage for an example.

Minimal complete definition

genericTraverseAction

Associated Types

type GenericTraverseF tag :: Type -> Type Source #

The target Applicative to traverse to.

type GenericTraverseC tag a :: Constraint Source #

The type class providing the action in traverse for permitted types.

Methods

genericTraverseAction Source #

Arguments

:: GenericTraverseC tag a 
=> String

data type name

-> String

constructor name

-> Maybe String

record name (if present)

-> Natural

field index

-> GenericTraverseF tag a 

The action in traverse (first argument).

We include data type metadata because this function is useful for monadic parsers, which can record it in error messages. (We don't do it for foldMap because it's pure.)

genericTraverseV1 :: GenericTraverseF tag (V1 p) Source #

Action to run when trying to parse a V1 (void data type).

Defaults to error, but you may wrap it in your functor if it pleases.

Instances

Instances details
GenericTraverse (EmptyRec0 f :: Type) Source #

traverse over types where all fields are replaced with the functor's empty.

Note that one may write a valid instance using a Monoid on as instead. I don't think you should. But I can't explain why.

Instance details

Defined in Generic.Data.Function.Traverse.Constructor

Associated Types

type GenericTraverseF (EmptyRec0 f) :: Type -> Type Source #

type GenericTraverseC (EmptyRec0 f) a Source #

GenericTraverse (NoRec0 f :: Type) Source #

traverse over types with no fields in any constructor.

Instance details

Defined in Generic.Data.Function.Traverse.Constructor

Associated Types

type GenericTraverseF (NoRec0 f) :: Type -> Type Source #

type GenericTraverseC (NoRec0 f) a Source #

type ENoEmpty tag = ('Text "Attempted to derive generic traverse for the void data type" :$$: 'Text "To override, implement genericTraverseV1 on:") :$$: (('Text "instance GenericTraverse (" :<>: 'ShowType tag) :<>: 'Text ")") Source #

class GTraverseC tag cd cc (si :: Natural) gf where Source #

Methods

gTraverseC :: GenericTraverseF tag (gf p) Source #

Instances

Instances details
Applicative (GenericTraverseF tag) => GTraverseC (tag :: k1) (cd :: k2) (cc :: k3) 0 (U1 :: k4 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Constructor

Methods

gTraverseC :: forall (p :: k30). GenericTraverseF tag (U1 p) Source #

(Applicative (GenericTraverseF tag), GTraverseC tag cd cc si l, GTraverseC tag cd cc (si + ProdArity r) r) => GTraverseC (tag :: k1) (cd :: k2) (cc :: k3) si (l :*: r :: Type -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Constructor

Methods

gTraverseC :: forall (p :: k30). GenericTraverseF tag ((l :*: r) p) Source #

(GenericTraverse tag, GenericTraverseC tag a, Functor (GenericTraverseF tag), KnownNat si, Selector cs, Constructor cc, Datatype cd) => GTraverseC (tag :: k1) (cd :: k3) (cc :: k2) si (S1 cs (Rec0 a) :: k4 -> Type) Source # 
Instance details

Defined in Generic.Data.Function.Traverse.Constructor

Methods

gTraverseC :: forall (p :: k30). GenericTraverseF tag (S1 cs (Rec0 a) p) Source #

type family ProdArity (f :: Type -> Type) :: Natural where ... Source #

Equations

ProdArity (S1 c f) = 1 
ProdArity (l :*: r) = ProdArity l + ProdArity r