{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
module Hyper.Combinator.Compose
( HCompose (..)
, _HCompose
, W_HCompose (..)
, HComposeConstraint1
, decompose
, decompose'
, hcomposed
) where
import Control.Lens (Iso', Optic, Profunctor, iso)
import Data.Constraint (withDict)
import Hyper.Class.Apply (HApply (..))
import Hyper.Class.Foldable (HFoldable (..))
import Hyper.Class.Functor (HFunctor (..), hiso)
import Hyper.Class.Nodes (HNodes (..), HWitness (..), (#>))
import Hyper.Class.Pointed (HPointed (..))
import Hyper.Class.Recursive (RNodes (..), RTraversable, Recursively (..))
import Hyper.Class.Traversable (ContainedH (..), HTraversable (..), htraverse)
import Hyper.Class.ZipMatch (ZipMatch (..))
import Hyper.Type (GetHyperType, HyperType, type (#))
import Hyper.Type.Pure (Pure, _Pure)
import Text.PrettyPrint.HughesPJClass (Pretty (..))
import Hyper.Internal.Prelude
newtype HCompose a b h = HCompose {forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType).
HCompose a b h -> a # HCompose b (GetHyperType h)
getHCompose :: a # HCompose b (GetHyperType h)}
deriving stock (forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType) x.
Rep (HCompose a b h) x -> HCompose a b h
forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType) x.
HCompose a b h -> Rep (HCompose a b h) x
$cto :: forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType) x.
Rep (HCompose a b h) x -> HCompose a b h
$cfrom :: forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType) x.
HCompose a b h -> Rep (HCompose a b h) x
Generic)
makeCommonInstances [''HCompose]
instance Pretty (a # HCompose b (GetHyperType h)) => Pretty (HCompose a b h) where
pPrintPrec :: PrettyLevel -> Rational -> HCompose a b h -> Doc
pPrintPrec PrettyLevel
level Rational
prec (HCompose a # HCompose b (GetHyperType h)
x) = forall a. Pretty a => PrettyLevel -> Rational -> a -> Doc
pPrintPrec PrettyLevel
level Rational
prec a # HCompose b (GetHyperType h)
x
{-# INLINE _HCompose #-}
_HCompose ::
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose :: forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose = forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType).
HCompose a b h -> a # HCompose b (GetHyperType h)
getHCompose forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType).
(a # HCompose b (GetHyperType h)) -> HCompose a b h
HCompose
{-# ANN module "HLint: ignore Use camelCase" #-}
data W_HCompose a b n where
W_HCompose :: HWitness a a0 -> HWitness b b0 -> W_HCompose a b (HCompose a0 b0)
instance (HNodes a, HNodes b) => HNodes (HCompose a b) where
type HNodesConstraint (HCompose a b) c = HNodesConstraint a (HComposeConstraint0 c b)
type HWitnessType (HCompose a b) = W_HCompose a b
{-# INLINE hLiftConstraint #-}
hLiftConstraint :: forall (c :: (AHyperType -> *) -> Constraint)
(n :: AHyperType -> *) r.
HNodesConstraint (HCompose a b) c =>
HWitness (HCompose a b) n -> Proxy c -> (c n => r) -> r
hLiftConstraint (HWitness (W_HCompose HWitness a a0
w0 HWitness b b0
w1)) Proxy c
p c n => r
r =
forall (h :: AHyperType -> *)
(c :: (AHyperType -> *) -> Constraint) (n :: AHyperType -> *) r.
(HNodes h, HNodesConstraint h c) =>
HWitness h n -> Proxy c -> (c n => r) -> r
hLiftConstraint HWitness a a0
w0 (forall (c :: (AHyperType -> *) -> Constraint).
Proxy c -> Proxy (HComposeConstraint0 c b)
p0 Proxy c
p) forall a b. (a -> b) -> a -> b
$
forall (h :: AHyperType -> *)
(c :: (AHyperType -> *) -> Constraint) (n :: AHyperType -> *) r.
(HNodes h, HNodesConstraint h c) =>
HWitness h n -> Proxy c -> (c n => r) -> r
hLiftConstraint HWitness b b0
w1 (forall (proxy0 :: ((AHyperType -> *) -> Constraint) -> *)
(c :: (AHyperType -> *) -> Constraint)
(proxy1 :: (AHyperType -> *) -> *) (a0 :: AHyperType -> *).
proxy0 c -> proxy1 a0 -> Proxy (HComposeConstraint1 c a0)
p1 Proxy c
p HWitness a a0
w0) (forall (c :: Constraint) e r. HasDict c e => e -> (c => r) -> r
withDict (forall (c :: (AHyperType -> *) -> Constraint)
(a0 :: AHyperType -> *) (b0 :: AHyperType -> *).
HComposeConstraint1 c a0 b0 =>
Proxy c
-> HWitness a a0 -> HWitness b b0 -> Dict (c (HCompose a0 b0))
d0 Proxy c
p HWitness a a0
w0 HWitness b b0
w1) c n => r
r)
forall (c :: Constraint) e r. HasDict c e => (c => r) -> e -> r
\\ forall (c :: (AHyperType -> *) -> Constraint)
(b :: AHyperType -> *) (h0 :: AHyperType -> *)
(proxy0 :: ((AHyperType -> *) -> Constraint) -> *)
(proxy1 :: (AHyperType -> *) -> *)
(proxy2 :: (AHyperType -> *) -> *).
HComposeConstraint0 c b h0 =>
proxy0 c
-> proxy1 b
-> proxy2 h0
-> Dict (HNodesConstraint b (HComposeConstraint1 c h0))
hComposeConstraint0 Proxy c
p (forall {k} (t :: k). Proxy t
Proxy @b) HWitness a a0
w0
where
p0 :: Proxy c -> Proxy (HComposeConstraint0 c b)
p0 :: forall (c :: (AHyperType -> *) -> Constraint).
Proxy c -> Proxy (HComposeConstraint0 c b)
p0 Proxy c
_ = forall {k} (t :: k). Proxy t
Proxy
p1 :: proxy0 c -> proxy1 a0 -> Proxy (HComposeConstraint1 c a0)
p1 :: forall (proxy0 :: ((AHyperType -> *) -> Constraint) -> *)
(c :: (AHyperType -> *) -> Constraint)
(proxy1 :: (AHyperType -> *) -> *) (a0 :: AHyperType -> *).
proxy0 c -> proxy1 a0 -> Proxy (HComposeConstraint1 c a0)
p1 proxy0 c
_ proxy1 a0
_ = forall {k} (t :: k). Proxy t
Proxy
d0 ::
HComposeConstraint1 c a0 b0 =>
Proxy c ->
HWitness a a0 ->
HWitness b b0 ->
Dict (c (HCompose a0 b0))
d0 :: forall (c :: (AHyperType -> *) -> Constraint)
(a0 :: AHyperType -> *) (b0 :: AHyperType -> *).
HComposeConstraint1 c a0 b0 =>
Proxy c
-> HWitness a a0 -> HWitness b b0 -> Dict (c (HCompose a0 b0))
d0 Proxy c
_ HWitness a a0
_ HWitness b b0
_ = forall (c :: (AHyperType -> *) -> Constraint)
(h0 :: AHyperType -> *) (h1 :: AHyperType -> *).
HComposeConstraint1 c h0 h1 =>
Dict (c (HCompose h0 h1))
hComposeConstraint1
class HComposeConstraint0 (c :: HyperType -> Constraint) (b :: HyperType) (h0 :: HyperType) where
hComposeConstraint0 ::
proxy0 c ->
proxy1 b ->
proxy2 h0 ->
Dict (HNodesConstraint b (HComposeConstraint1 c h0))
instance HNodesConstraint b (HComposeConstraint1 c h0) => HComposeConstraint0 c b h0 where
{-# INLINE hComposeConstraint0 #-}
hComposeConstraint0 :: forall (proxy0 :: ((AHyperType -> *) -> Constraint) -> *)
(proxy1 :: (AHyperType -> *) -> *)
(proxy2 :: (AHyperType -> *) -> *).
proxy0 c
-> proxy1 b
-> proxy2 h0
-> Dict (HNodesConstraint b (HComposeConstraint1 c h0))
hComposeConstraint0 proxy0 c
_ proxy1 b
_ proxy2 h0
_ = forall (a :: Constraint). a => Dict a
Dict
class HComposeConstraint1 (c :: HyperType -> Constraint) (h0 :: HyperType) (h1 :: HyperType) where
hComposeConstraint1 :: Dict (c (HCompose h0 h1))
instance c (HCompose h0 h1) => HComposeConstraint1 c h0 h1 where
{-# INLINE hComposeConstraint1 #-}
hComposeConstraint1 :: Dict (c (HCompose h0 h1))
hComposeConstraint1 = forall (a :: Constraint). a => Dict a
Dict
instance
(HPointed a, HPointed b) =>
HPointed (HCompose a b)
where
{-# INLINE hpure #-}
hpure :: forall (p :: AHyperType -> *).
(forall (n :: AHyperType -> *). HWitness (HCompose a b) n -> p # n)
-> HCompose a b # p
hpure forall (n :: AHyperType -> *). HWitness (HCompose a b) n -> p # n
x =
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
# hpure
( \wa ->
_HCompose # hpure (\wb -> _HCompose # x (HWitness (W_HCompose wa wb)))
)
instance (HFunctor a, HFunctor b) => HFunctor (HCompose a b) where
{-# INLINE hmap #-}
hmap :: forall (p :: AHyperType -> *) (q :: AHyperType -> *).
(forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> q # n)
-> (HCompose a b # p) -> HCompose a b # q
hmap forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> q # n
f =
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> q # n)
-> (h # p) -> h # q
hmap
( \HWitness a n
w0 ->
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> q # n)
-> (h # p) -> h # q
hmap (\HWitness b n
w1 -> forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> q # n
f (forall (h :: AHyperType -> *) (n :: AHyperType -> *).
HWitnessType h n -> HWitness h n
HWitness (forall (a :: AHyperType -> *) (a0 :: AHyperType -> *)
(b :: AHyperType -> *) (b0 :: AHyperType -> *).
HWitness a a0 -> HWitness b b0 -> W_HCompose a b (HCompose a0 b0)
W_HCompose HWitness a n
w0 HWitness b n
w1)))
)
instance (HApply a, HApply b) => HApply (HCompose a b) where
{-# INLINE hzip #-}
hzip :: forall (p :: AHyperType -> *) (q :: AHyperType -> *).
(HCompose a b # p)
-> (HCompose a b # q) -> HCompose a b # (p :*: q)
hzip (HCompose a # HCompose b (GetHyperType ('AHyperType p))
a0) =
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> q # n)
-> (h # p) -> h # q
hmap
( \HWitness a n
_ (HCompose b # HCompose p (GetHyperType ('AHyperType n))
b0 :*: HCompose b # HCompose q (GetHyperType ('AHyperType n))
b1) ->
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
# hmap
( \_ (HCompose i0 :*: HCompose i1) ->
_HCompose # (i0 :*: i1)
)
(hzip b0 b1)
)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HApply h =>
(h # p) -> (h # q) -> h # (p :*: q)
hzip a # HCompose b (GetHyperType ('AHyperType p))
a0
instance (HFoldable a, HFoldable b) => HFoldable (HCompose a b) where
{-# INLINE hfoldMap #-}
hfoldMap :: forall a (p :: AHyperType -> *).
Monoid a =>
(forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> a)
-> (HCompose a b # p) -> a
hfoldMap forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> a
f =
forall (h :: AHyperType -> *) a (p :: AHyperType -> *).
(HFoldable h, Monoid a) =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> a)
-> (h # p) -> a
hfoldMap
( \HWitness a n
w0 ->
forall (h :: AHyperType -> *) a (p :: AHyperType -> *).
(HFoldable h, Monoid a) =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> a)
-> (h # p) -> a
hfoldMap (\HWitness b n
w1 -> forall (n :: AHyperType -> *).
HWitness (HCompose a b) n -> (p # n) -> a
f (forall (h :: AHyperType -> *) (n :: AHyperType -> *).
HWitnessType h n -> HWitness h n
HWitness (forall (a :: AHyperType -> *) (a0 :: AHyperType -> *)
(b :: AHyperType -> *) (b0 :: AHyperType -> *).
HWitness a a0 -> HWitness b b0 -> W_HCompose a b (HCompose a0 b0)
W_HCompose HWitness a n
w0 HWitness b n
w1)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall s a. s -> Getting a s a -> a
^. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall s a. s -> Getting a s a -> a
^. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose)
)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall s a. s -> Getting a s a -> a
^. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose)
instance (HTraversable a, HTraversable b) => HTraversable (HCompose a b) where
{-# INLINE hsequence #-}
hsequence :: forall (f :: * -> *) (p :: AHyperType -> *).
Applicative f =>
(HCompose a b # ContainedH f p) -> f (HCompose a b # p)
hsequence =
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
( forall (h :: AHyperType -> *) (f :: * -> *) (p :: AHyperType -> *).
(HTraversable h, Applicative f) =>
(h # ContainedH f p) -> f (h # p)
hsequence
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> q # n)
-> (h # p) -> h # q
hmap (forall a b. a -> b -> a
const (forall (f :: * -> *) (p :: AHyperType -> *) (h :: AHyperType).
f (p h) -> ContainedH f p h
MkContainedH forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose (forall (f :: * -> *) (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
(Applicative f, HTraversable h) =>
(forall (n :: AHyperType -> *).
HWitness h n -> (p # n) -> f (q # n))
-> (h # p) -> f (h # q)
htraverse (forall a b. a -> b -> a
const (forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall (f :: * -> *) (p :: AHyperType -> *) (h :: AHyperType).
ContainedH f p h -> f (p h)
runContainedH)))))
)
instance
(ZipMatch h0, ZipMatch h1, HTraversable h0, HFunctor h1) =>
ZipMatch (HCompose h0 h1)
where
{-# INLINE zipMatch #-}
zipMatch :: forall (p :: AHyperType -> *) (q :: AHyperType -> *).
(HCompose h0 h1 # p)
-> (HCompose h0 h1 # q) -> Maybe (HCompose h0 h1 # (p :*: q))
zipMatch (HCompose h0 # HCompose h1 (GetHyperType ('AHyperType p))
x) (HCompose h0 # HCompose h1 (GetHyperType ('AHyperType q))
y) =
forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
ZipMatch h =>
(h # p) -> (h # q) -> Maybe (h # (p :*: q))
zipMatch h0 # HCompose h1 (GetHyperType ('AHyperType p))
x h0 # HCompose h1 (GetHyperType ('AHyperType q))
y
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (f :: * -> *) (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
(Applicative f, HTraversable h) =>
(forall (n :: AHyperType -> *).
HWitness h n -> (p # n) -> f (q # n))
-> (h # p) -> f (h # q)
htraverse
( \HWitness h0 n
_ (HCompose h1 # HCompose p (GetHyperType ('AHyperType n))
cx :*: HCompose h1 # HCompose q (GetHyperType ('AHyperType n))
cy) ->
forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
ZipMatch h =>
(h # p) -> (h # q) -> Maybe (h # (p :*: q))
zipMatch h1 # HCompose p (GetHyperType ('AHyperType n))
cx h1 # HCompose q (GetHyperType ('AHyperType n))
cy
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall t b. AReview t b -> b -> t
#) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *). HWitness h n -> (p # n) -> q # n)
-> (h # p) -> h # q
hmap (\HWitness h1 n
_ (HCompose p # HCompose n (GetHyperType ('AHyperType n))
bx :*: HCompose q # HCompose n (GetHyperType ('AHyperType n))
by) -> p # HCompose n (GetHyperType ('AHyperType n))
bx forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: q # HCompose n (GetHyperType ('AHyperType n))
by forall a b. a -> (a -> b) -> b
& forall (a :: AHyperType -> *) (b :: AHyperType -> *)
(h :: AHyperType).
(a # HCompose b (GetHyperType h)) -> HCompose a b h
HCompose)
)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall t b. AReview t b -> b -> t
#)
instance
( HNodes a
, HNodes b
, HNodesConstraint a (HComposeConstraint0 RNodes b)
) =>
RNodes (HCompose a b)
instance
( HNodes h0
, HNodes h1
, c (HCompose h0 h1)
, HNodesConstraint h0 (HComposeConstraint0 RNodes h1)
, HNodesConstraint h0 (HComposeConstraint0 (Recursively c) h1)
) =>
Recursively c (HCompose h0 h1)
instance
( HTraversable a
, HTraversable b
, HNodesConstraint a (HComposeConstraint0 RNodes b)
, HNodesConstraint a (HComposeConstraint0 (Recursively HFunctor) b)
, HNodesConstraint a (HComposeConstraint0 (Recursively HFoldable) b)
, HNodesConstraint a (HComposeConstraint0 RTraversable b)
) =>
RTraversable (HCompose a b)
hcomposed ::
(Profunctor p, Functor f) =>
Optic
p
f
(a0 # HCompose b0 c0)
(a1 # HCompose b1 c1)
(HCompose a2 b2 # c2)
(HCompose a3 b3 # c3) ->
Optic
p
f
(HCompose a0 b0 # c0)
(HCompose a1 b1 # c1)
(a2 # HCompose b2 c2)
(a3 # HCompose b3 c3)
hcomposed :: forall (p :: * -> * -> *) (f :: * -> *) (a0 :: AHyperType -> *)
(b0 :: AHyperType -> *) (c0 :: AHyperType -> *)
(a1 :: AHyperType -> *) (b1 :: AHyperType -> *)
(c1 :: AHyperType -> *) (a2 :: AHyperType -> *)
(b2 :: AHyperType -> *) (c2 :: AHyperType -> *)
(a3 :: AHyperType -> *) (b3 :: AHyperType -> *)
(c3 :: AHyperType -> *).
(Profunctor p, Functor f) =>
Optic
p
f
(a0 # HCompose b0 c0)
(a1 # HCompose b1 c1)
(HCompose a2 b2 # c2)
(HCompose a3 b3 # c3)
-> Optic
p
f
(HCompose a0 b0 # c0)
(HCompose a1 b1 # c1)
(a2 # HCompose b2 c2)
(a3 # HCompose b3 c3)
hcomposed Optic
p
f
(a0 # HCompose b0 c0)
(a1 # HCompose b1 c1)
(HCompose a2 b2 # c2)
(HCompose a3 b3 # c3)
f = forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic
p
f
(a0 # HCompose b0 c0)
(a1 # HCompose b1 c1)
(HCompose a2 b2 # c2)
(HCompose a3 b3 # c3)
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
decompose ::
forall a0 b0 a1 b1.
(Recursively HFunctor a0, Recursively HFunctor b0, Recursively HFunctor a1, Recursively HFunctor b1) =>
Iso (Pure # HCompose a0 b0) (Pure # HCompose a1 b1) (a0 # b0) (a1 # b1)
decompose :: forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(a1 :: AHyperType -> *) (b1 :: AHyperType -> *).
(Recursively HFunctor a0, Recursively HFunctor b0,
Recursively HFunctor a1, Recursively HFunctor b1) =>
Iso
(Pure # HCompose a0 b0) (Pure # HCompose a1 b1) (a0 # b0) (a1 # b1)
decompose = forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (forall s a. s -> Getting a s a -> a
^. forall (a :: AHyperType -> *) (b :: AHyperType -> *).
(Recursively HFunctor a, Recursively HFunctor b) =>
Iso' (Pure # HCompose a b) (a # b)
decompose') (forall (a :: AHyperType -> *) (b :: AHyperType -> *).
(Recursively HFunctor a, Recursively HFunctor b) =>
Iso' (Pure # HCompose a b) (a # b)
decompose' forall t b. AReview t b -> b -> t
#)
decompose' ::
forall a b.
(Recursively HFunctor a, Recursively HFunctor b) =>
Iso' (Pure # HCompose a b) (a # b)
decompose' :: forall (a :: AHyperType -> *) (b :: AHyperType -> *).
(Recursively HFunctor a, Recursively HFunctor b) =>
Iso' (Pure # HCompose a b) (a # b)
decompose' =
forall (h :: AHyperType -> *) (j :: AHyperType -> *).
Iso (Pure # h) (Pure # j) (h # Pure) (j # Pure)
_Pure
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *).
HWitness h n -> AnIso' (p # n) (q # n))
-> Iso' (h # p) (h # q)
hiso
( forall {k} (t :: k). Proxy t
Proxy @(Recursively HFunctor) forall (h :: AHyperType -> *)
(c :: (AHyperType -> *) -> Constraint) (n :: AHyperType -> *) r.
(HNodes h, HNodesConstraint h c) =>
Proxy c -> (c n => r) -> HWitness h n -> r
#>
forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (h :: AHyperType -> *) (p :: AHyperType -> *)
(q :: AHyperType -> *).
HFunctor h =>
(forall (n :: AHyperType -> *).
HWitness h n -> AnIso' (p # n) (q # n))
-> Iso' (h # p) (h # q)
hiso (forall {k} (t :: k). Proxy t
Proxy @(Recursively HFunctor) forall (h :: AHyperType -> *)
(c :: (AHyperType -> *) -> Constraint) (n :: AHyperType -> *) r.
(HNodes h, HNodesConstraint h c) =>
Proxy c -> (c n => r) -> HWitness h n -> r
#> forall (a0 :: AHyperType -> *) (b0 :: AHyperType -> *)
(h0 :: AHyperType -> *) (a1 :: AHyperType -> *)
(b1 :: AHyperType -> *) (h1 :: AHyperType -> *).
Iso
(HCompose a0 b0 # h0)
(HCompose a1 b1 # h1)
(a0 # HCompose b0 h0)
(a1 # HCompose b1 h1)
_HCompose forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a :: AHyperType -> *) (b :: AHyperType -> *).
(Recursively HFunctor a, Recursively HFunctor b) =>
Iso' (Pure # HCompose a b) (a # b)
decompose')
forall (c :: Constraint) e r. HasDict c e => (c => r) -> e -> r
\\ forall (c :: (AHyperType -> *) -> Constraint)
(h :: AHyperType -> *) (proxy :: Constraint -> *).
Recursively c h =>
proxy (c h) -> Dict (c h, HNodesConstraint h (Recursively c))
recursively (forall {k} (t :: k). Proxy t
Proxy @(HFunctor b))
)
forall (c :: Constraint) e r. HasDict c e => (c => r) -> e -> r
\\ forall (c :: (AHyperType -> *) -> Constraint)
(h :: AHyperType -> *) (proxy :: Constraint -> *).
Recursively c h =>
proxy (c h) -> Dict (c h, HNodesConstraint h (Recursively c))
recursively (forall {k} (t :: k). Proxy t
Proxy @(HFunctor a))