Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.MFunctor
Documentation
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', (~) [*] (ExpandFields bs (Domains ps vs)) (Codomains (ExpandFieldFunction bs (FlipVariance vs') ps vs) vs'), (~) [*] (ExpandFields 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', (~) [*] (ExpandFields bs (Codomains ps vs)) (Codomains (ExpandFieldFunction bs vs' ps vs) vs'), (~) [*] (ExpandFields 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
Domain (a -> b) CoV ~ a Domain (a -> b) ContraV ~ b Domains fs vs ~ Map (Uncurry Domain) (Zip fs vs)
type family Codomains fs vs Source
Codomain (a -> b) CoV ~ b Codomain (a -> b) ContraV ~ a Codomains fs vs ~ Map (Uncurry Codomain) (Zip fs vs)
class MFunctor f fs vs | f -> vs, fs -> k, vs -> k where Source
MFunctor
type class, generalisation of Functor
, Bifunctor
, Contravariant
, Profunctor
, etc.
If f
has a MGeneric
instance, and types that appear in f
have a MFunctor
instance, it is possible to derive a MFunctor
instance for f.
>>>
instance MFunctor [] '[a -> a'] '[CoV]
>>>
instance MFunctor (->) '[a' -> a, b -> b'] '[ContraV, CoV]
Minimal complete definition
Nothing
Methods
mmapP :: Proxy f -> Proxy vs -> HList fs -> (f :$: Domains fs vs) -> f :$: Codomains fs vs Source
see mmap
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
Proxy-less mmapP
, generalisation of fmap
, bimap
, contramap
, dimap
, etc.
If f is covariant in all its parameters (its variances are '[CoV, CoV, ..., CoV]) :
mmap :: HList '[a1 -> b1, ..., an -> bn] -> f a1 ... an -> f b1 ... bn
e.g. when f is contravariant in some parameters (variances of (->) are '[ContraV, CoV])
mmap :: HList '[b1 -> a1, a2 -> b2] -> (a1 -> a2) -> (b1 -> b2)