mgeneric-0.0.0.0: Generics with multiple parameters

Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.MGeneric

Documentation

type family f :$: as :: * Source

Equations

f :$: [] = f 
f :$: (a : as) = f a :$: as 

data Un s Source

Constructors

UV 
UT 
UF (Field s) 
(Un s) :**: (Un s) 
(Un s) :++: (Un s) 

data Field s Source

Constructors

FK s 
FP Nat 
forall k . k :@: [Field s] 

Instances

AdaptFieldFunction n ([] (Field *)) ps 
(MZipWith k n f (ExpandFieldFunction n bs ps), (~) * (ZipInput n (ZipWithType' k n f (ExpandFieldFunction n bs ps))) (ZipWithType k n f (ExpandFieldFunction n bs ps)), AdaptFieldFunction n bs ps, AdaptFieldFunction n as ps) => AdaptFieldFunction n ((:) (Field *) ((:@:) * k f bs) as) ps 
(HLookup m n ps, (~) * (ZipInput n ((:!:) ps m)) ((:!:) (ZipInputs n ps) m), AdaptFieldFunction n as ps) => AdaptFieldFunction n ((:) (Field *) (FP * m) as) ps 
AdaptFieldMonoid ([] (Field *)) fs 
AdaptFieldFunction ([] (Field *)) fs t 
AdaptFieldFunction ([] (Field *)) ([] Variance) ps vs 
(MFoldable k f (ExpandField bs fs), AdaptFieldMonoid bs fs, AdaptFieldMonoid as fs) => AdaptFieldMonoid ((:) (Field *) ((:@:) * k f bs) as) fs 
(GFPMFoldable n fs, AdaptFieldMonoid as fs) => AdaptFieldMonoid ((:) (Field *) (FP * n) as) fs 
AdaptFieldMonoid as fs => AdaptFieldMonoid ((:) (Field *) (FK * a) as) fs 
(MTraversable k f (ExpandFieldFunction bs fs) t, (~) * ((:$:) k f (ExpandField bs (Codomains fs))) ((:$:) k f (Codomains (ExpandFieldFunction bs fs))), (~) * ((:$:) k f (ExpandField bs (Domains fs))) ((:$:) k f (Domains (ExpandFieldFunction bs fs))), AdaptFieldFunction bs fs t, AdaptFieldFunction as fs t) => AdaptFieldFunction ((:) (Field *) ((:@:) * k f bs) as) fs t 
(GFPMTraversable n fs t, AdaptFieldFunction as fs t, (~) [*] (AppMap ((:) * ((:!:) fs n) (ExpandFieldFunction as fs)) t) ((:) * ((:!:) (Domains fs) n -> t ((:!:) (Codomains fs) n)) (AppMap (ExpandFieldFunction as fs) t))) => AdaptFieldFunction ((:) (Field *) (FP * n) as) fs t 
AdaptFieldFunction as fs t => AdaptFieldFunction ((:) (Field *) (FK * a) as) fs t 
(MFunctor k f (ExpandFieldFunction bs (FlipVariance vs') ps vs) vs', (~) [*] (ExpandField bs (Domains ps vs)) (Codomains (ExpandFieldFunction bs (FlipVariance vs') ps vs) vs'), (~) [*] (ExpandField bs (Codomains ps vs)) (Domains (ExpandFieldFunction bs (FlipVariance vs') ps vs) vs'), AdaptFieldFunction bs (FlipVariance vs') ps vs, AdaptFieldFunction as vfs ps vs) => AdaptFieldFunction ((:) (Field *) ((:@:) * k f bs) as) ((:) Variance ContraV vfs) ps vs 
(MFunctor k f (ExpandFieldFunction bs vs' ps vs) vs', (~) [*] (ExpandField bs (Codomains ps vs)) (Codomains (ExpandFieldFunction bs vs' ps vs) vs'), (~) [*] (ExpandField bs (Domains ps vs)) (Domains (ExpandFieldFunction bs vs' ps vs) vs'), AdaptFieldFunction bs vs' ps vs, AdaptFieldFunction as vfs ps vs) => AdaptFieldFunction ((:) (Field *) ((:@:) * k f bs) as) ((:) Variance CoV vfs) ps vs 
(GFPMFunctor [Variance] n ps vs, AdaptFieldFunction as vfs ps vs, (~) * (Flip ((:!:) ps n)) ((:!:) (Domains ps vs) n -> (:!:) (Codomains ps vs) n)) => AdaptFieldFunction ((:) (Field *) (FP * n) as) ((:) Variance ContraV vfs) ps vs 
(GFPMFunctor [Variance] n ps vs, AdaptFieldFunction as vfs ps vs, (~) * ((:!:) ps n) ((:!:) (Domains ps vs) n -> (:!:) (Codomains ps vs) n)) => AdaptFieldFunction ((:) (Field *) (FP * n) as) ((:) Variance CoV vfs) ps vs 
AdaptFieldFunction as vfs ps vs => AdaptFieldFunction ((:) (Field *) (FK * a) as) ((:) Variance v vfs) ps vs 

data In u ps :: * where Source

Constructors

InT :: In UT ps 
InF :: InField f ps -> In (UF f) ps 
InL :: In u ps -> In (u :++: v) ps 
InR :: In v ps -> In (u :++: v) ps 
(:*:) :: In u ps -> In v ps -> In (u :**: v) ps infixr 5 

data InField f ps :: * where Source

Constructors

InK :: a -> InField (FK a) ps 
InP :: (ps :!: n) -> InField (FP n) ps 
InA :: (f :$: ExpandField as ps) -> InField (f :@: as) ps 

type family ExpandField f ps :: [*] Source

Equations

ExpandField [] ps = [] 
ExpandField (FK a : fs) ps = a : ExpandField fs ps 
ExpandField (FP n : fs) ps = (ps :!: n) : ExpandField fs ps 
ExpandField ((f :@: as) : fs) ps = (f :$: ExpandField as ps) : ExpandField fs ps 

class MGeneric a where Source

Associated Types

type Rep a :: Un * Source

type Pars a :: [*] Source

Methods

from :: a -> In (Rep a) (Pars a) Source

to :: In (Rep a) (Pars a) -> a Source

Instances

MGeneric Bool 
MGeneric Ordering 
MGeneric () 
MGeneric [a] 
MGeneric (Endo a) 
MGeneric (Sum a) 
MGeneric (Product a) 
MGeneric (First a) 
MGeneric (Last a) 
MGeneric (Maybe a) 
MGeneric (Identity a) 
MGeneric (Either a b) 
MGeneric (a, b) 
MGeneric (Const a b) 
MGeneric (a, b, c) 
MGeneric (Test a b c) 
MGeneric (a, b, c, d) 
MGeneric (a, b, c, d, e) 
MGeneric (a, b, c, d, e, f) 
MGeneric (a, b, c, d, e, f, g) 
MGeneric (a, b, c, d, e, f, g, h) 
MGeneric (a, b, c, d, e, f, g, h, i)