mgeneric-0.0.0.0: Generics with multiple parameters

Safe HaskellNone
LanguageHaskell2010

Data.MFunctor

Documentation

data Variance Source

Constructors

CoV 
ContraV 

Instances

MFunctor * Bool ([] *) ([] Variance) 
MFunctor * Ordering ([] *) ([] Variance) 
MFunctor * () ([] *) ([] Variance) 
AdaptFieldFunction ([] (Field *)) ([] Variance) ps vs 
GFPMFunctor [Variance] n as vs => GFPMFunctor [Variance] (NS n) ((:) * (a -> b) as) ((:) Variance ContraV vs) 
GFPMFunctor [Variance] n as vs => GFPMFunctor [Variance] (NS n) ((:) * (a -> b) as) ((:) Variance CoV vs) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> * -> * -> *) (,,,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ((:) * (h -> h') ((:) * (i -> i') ([] *)))))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> * -> *) (,,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ((:) * (h -> h') ([] *))))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> *) (,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ([] *)))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> *) (,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ([] *))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))))) 
MFunctor (* -> * -> * -> * -> * -> *) (,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ([] *)))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))) 
MFunctor (* -> * -> * -> * -> *) (,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ([] *))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))) 
MFunctor (* -> * -> * -> *) (,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ([] *)))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))) 
MFunctor (* -> * -> *) (->) ((:) * (a' -> a) ((:) * (b -> b') ([] *))) ((:) Variance ContraV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> * -> *) Either ((:) * (a -> a') ((:) * (b -> b') ([] *))) ((:) Variance CoV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> * -> *) (,) ((:) * (a -> a') ((:) * (b -> b') ([] *))) ((:) Variance CoV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> *) [] ((:) * (a -> a') ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Sum ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Product ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) First ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Last ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Maybe ((:) * (a -> a') ([] *)) ((:) Variance CoV ([] Variance)) 
(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 

type family Domains fs vs Source

Equations

Domains [] [] = [] 
Domains ((a -> b) : as) (CoV : vs) = a : Domains as vs 
Domains ((a -> b) : as) (ContraV : vs) = b : Domains as vs 

type family Codomains fs vs Source

Equations

Codomains [] [] = [] 
Codomains ((a -> b) : as) (CoV : vs) = b : Codomains as vs 
Codomains ((a -> b) : as) (ContraV : vs) = a : Codomains as vs 

type family Flip f Source

Equations

Flip (a -> b) = b -> a 

class MFunctor f fs vs | f -> vs, fs -> k, vs -> k where Source

Minimal complete definition

Nothing

Methods

mmapP :: Proxy f -> Proxy vs -> HList fs -> (f :$: Domains fs vs) -> f :$: Codomains fs vs Source

Instances

MFunctor * Bool ([] *) ([] Variance) 
MFunctor * Ordering ([] *) ([] Variance) 
MFunctor * () ([] *) ([] Variance) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> * -> * -> *) (,,,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ((:) * (h -> h') ((:) * (i -> i') ([] *)))))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> * -> *) (,,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ((:) * (h -> h') ([] *))))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> * -> *) (,,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ((:) * (g -> g') ([] *)))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))))) 
MFunctor (* -> * -> * -> * -> * -> * -> *) (,,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ((:) * (f -> f') ([] *))))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))))) 
MFunctor (* -> * -> * -> * -> * -> *) (,,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ((:) * (e -> e') ([] *)))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))))) 
MFunctor (* -> * -> * -> * -> *) (,,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ((:) * (d -> d') ([] *))))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance))))) 
MFunctor (* -> * -> * -> *) (,,) ((:) * (a -> a') ((:) * (b -> b') ((:) * (c -> c') ([] *)))) ((:) Variance CoV ((:) Variance CoV ((:) Variance CoV ([] Variance)))) 
MFunctor (* -> * -> *) (->) ((:) * (a' -> a) ((:) * (b -> b') ([] *))) ((:) Variance ContraV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> * -> *) Either ((:) * (a -> a') ((:) * (b -> b') ([] *))) ((:) Variance CoV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> * -> *) (,) ((:) * (a -> a') ((:) * (b -> b') ([] *))) ((:) Variance CoV ((:) Variance CoV ([] Variance))) 
MFunctor (* -> *) [] ((:) * (a -> a') ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Sum ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Product ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) First ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Last ((:) * (a -> b) ([] *)) ((:) Variance CoV ([] Variance)) 
MFunctor (* -> *) Maybe ((:) * (a -> a') ([] *)) ((:) Variance CoV ([] Variance)) 

mmap :: forall a b f fs vs. (Unapply a f (Domains fs vs), Unapply b f (Codomains fs vs), MFunctor f fs vs) => HList fs -> a -> b Source

class GMFunctor f fs vs where Source

Methods

mmapG :: Proxy vs -> HList fs -> In f (Domains fs vs) -> In f (Codomains fs vs) Source

Instances

GMFunctor (UT *) fs vs 
GMFunctor (UV *) fs vs 
GFMFunctor f fs vs => GMFunctor (UF * f) fs vs 
(GMFunctor u fs vs, GMFunctor v fs vs) => GMFunctor ((:++:) * u v) fs vs 
(GMFunctor u fs vs, GMFunctor v fs vs) => GMFunctor ((:**:) * u v) fs vs 

class GFMFunctor f fs vs where Source

Methods

mmapGF :: Proxy vs -> HList fs -> InField f (Domains fs vs) -> InField f (Codomains fs vs) Source

Instances

(GFPMFunctor [Variance] n fs vs, (~) * ((:!:) fs n) ((:!:) (Domains fs vs) n -> (:!:) (Codomains fs vs) n)) => GFMFunctor (FP * n) fs vs 
GFMFunctor (FK * a) fs vs 
(MFunctor k f (ExpandFieldFunction as vs' ps vs) vs', (~) [*] (ExpandField as (Codomains ps vs)) (Codomains (ExpandFieldFunction as vs' ps vs) vs'), (~) [*] (ExpandField as (Domains ps vs)) (Domains (ExpandFieldFunction as vs' ps vs) vs'), AdaptFieldFunction as vs' ps vs) => GFMFunctor ((:@:) * k f as) ps vs 

class GFPMFunctor n fs vs where Source

Methods

mmapGFP :: Proxy n -> Proxy vs -> HList fs -> fs :!: n Source

Instances

GFPMFunctor [k] NZ ((:) * (a -> b) as) ((:) k v vs) 
GFPMFunctor [Variance] n as vs => GFPMFunctor [Variance] (NS n) ((:) * (a -> b) as) ((:) Variance ContraV vs) 
GFPMFunctor [Variance] n as vs => GFPMFunctor [Variance] (NS n) ((:) * (a -> b) as) ((:) Variance CoV vs) 

type family ExpandFieldFunction f vfs ps vs :: [*] Source

Equations

ExpandFieldFunction [] [] ps vs = [] 
ExpandFieldFunction (FK a : fs) (v : vfs) ps vs = (a -> a) : ExpandFieldFunction fs vfs ps vs 
ExpandFieldFunction (FP n : fs) (CoV : vfs) ps vs = (ps :!: n) : ExpandFieldFunction fs vfs ps vs 
ExpandFieldFunction (FP n : fs) (ContraV : vfs) ps vs = (ps :!: n) : ExpandFieldFunction fs vfs ps vs 
ExpandFieldFunction ((f :@: as) : fs) (CoV : vfs) ps vs = ((f :$: ExpandField as (Domains ps vs)) -> f :$: ExpandField as (Codomains ps vs)) : ExpandFieldFunction fs vfs ps vs 
ExpandFieldFunction ((f :@: as) : fs) (ContraV : vfs) ps vs = ((f :$: ExpandField as (Codomains ps vs)) -> f :$: ExpandField as (Domains ps vs)) : ExpandFieldFunction fs vfs ps vs 

class AdaptFieldFunction f vfs ps vs where Source

Methods

adaptFieldFunction :: Proxy f -> Proxy vfs -> Proxy vs -> HList ps -> HList (ExpandFieldFunction f vfs ps vs) Source

Instances

AdaptFieldFunction ([] (Field *)) ([] Variance) ps vs 
(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 

type family FlipVariance vs Source

Equations

FlipVariance [] = [] 
FlipVariance (CoV : vs) = ContraV : FlipVariance vs 
FlipVariance (ContraV : vs) = CoV : FlipVariance vs