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

Avoid orphan instances by defining custom empty types to use here. See the binrep library on Hackage for an example.

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

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 #

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

Methods

gTraverseC :: GenericTraverseF tag (gf p) Source #

Instances

Instances details
Applicative (GenericTraverseF tag) => GTraverseC (cd :: k2) (cc :: k3) 0 (tag :: k1) (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 cd cc si tag l, GTraverseC cd cc (si + ProdArity r) tag r) => GTraverseC (cd :: k2) (cc :: k3) si (tag :: k1) (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 (cd :: k3) (cc :: k2) si (tag :: k1) (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