{-# LANGUAGE UndecidableInstances #-}

module Pandora.Paradigm.Controlflow.Effect.Adaptable where

import Pandora.Core.Functor (type (~>))
import Pandora.Pattern.Semigroupoid ((.))
import Pandora.Pattern.Category (identity)
import Pandora.Pattern.Functor.Covariant (Covariant)
import Pandora.Pattern.Functor.Monoidal (Monoidal)
import Pandora.Pattern.Functor.Comonad (Comonad)
import Pandora.Pattern.Functor.Monad (Monad)
import Pandora.Pattern.Transformer (Liftable (lift), Lowerable (lower), Hoistable ((/|\)))
import Pandora.Paradigm.Primary.Algebraic.Exponential (type (-->))
import Pandora.Paradigm.Primary.Algebraic.Product ((:*:))
import Pandora.Paradigm.Primary.Algebraic (Extractable)
import Pandora.Paradigm.Controlflow.Effect.Interpreted (Schematic)
import Pandora.Paradigm.Controlflow.Effect.Transformer (Monadic, Comonadic, wrap, bring, (:>), (:<))

class Adaptable t u where
	{-# MINIMAL adapt #-}
	adapt :: t ~> u

type Lifting t u = (Monadic t, Liftable (->) (Schematic Monad t), Covariant (->) (->) u)
type Lowering t u = (Comonadic t, Lowerable (->) (Schematic Comonad t), Covariant (->) (->) u)
type Wrappable t u = (Monadic t, Monoidal (-->) (->) (:*:) (:*:) u)
type Bringable t u = (Comonadic t, Extractable u)

instance Adaptable t t where
	adapt :: t a -> t a
adapt = t a -> t a
forall (m :: * -> * -> *) a. Category m => m a a
identity

instance Lifting t u => Adaptable u (t :> u) where
	adapt :: u a -> (:>) t u a
adapt = u a -> (:>) t u a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance Wrappable t u => Adaptable t (t :> u) where
	adapt :: t a -> (:>) t u a
adapt = t a -> (:>) t u a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance Lowering t u => Adaptable (t :< u) u where
	adapt :: (:<) t u a -> u a
adapt = (:<) t u a -> u a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance Bringable t u => Adaptable (t :< u) t where
	adapt :: (:<) t u a -> t a
adapt = (:<) t u a -> t a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring

instance
	( Liftable (->) (Schematic Monad t)
	, Covariant (->) (->) (Schematic Monad u v)
	, Wrappable u v
	) => Adaptable u (t :> u :> v) where
	adapt :: u a -> (:>) t (u :> v) a
adapt = (:>) u v a -> (:>) t (u :> v) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u v a -> (:>) t (u :> v) a)
-> (u a -> (:>) u v a) -> u a -> (:>) t (u :> v) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. u a -> (:>) u v a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lifting t (Schematic Monad u v)
	, Lifting u v
	) => Adaptable v (t :> u :> v) where
	adapt :: v a -> (:>) t (u :> v) a
adapt = (:>) u v a -> (:>) t (u :> v) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u v a -> (:>) t (u :> v) a)
-> (v a -> (:>) u v a) -> v a -> (:>) t (u :> v) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. v a -> (:>) u v a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lowering t (Schematic Comonad u v)
	, Bringable u v
	) => Adaptable (t :< u :< v) u where
	adapt :: (:<) t (u :< v) a -> u a
adapt = (:<) u v a -> u a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) u v a -> u a)
-> ((:<) t (u :< v) a -> (:<) u v a) -> (:<) t (u :< v) a -> u a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< v) a -> (:<) u v a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u v)
	, Lowering u v
	) => Adaptable (t :< u :< v) v where
	adapt :: (:<) t (u :< v) a -> v a
adapt = (:<) u v a -> v a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u v a -> v a)
-> ((:<) t (u :< v) a -> (:<) u v a) -> (:<) t (u :< v) a -> v a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< v) a -> (:<) u v a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Liftable (->) (Schematic Monad t)
	, Lifting t (Schematic Monad u (v :> w))
	, Lifting u (Schematic Monad v w)
	, Wrappable v w
	) => Adaptable v (t :> u :> v :> w) where
	adapt :: v a -> (:>) t (u :> (v :> w)) a
adapt = (:>) u (v :> w) a -> (:>) t (u :> (v :> w)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> w) a -> (:>) t (u :> (v :> w)) a)
-> (v a -> (:>) u (v :> w) a) -> v a -> (:>) t (u :> (v :> w)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v w a -> (:>) u (v :> w) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v w a -> (:>) u (v :> w) a)
-> (v a -> (:>) v w a) -> v a -> (:>) u (v :> w) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. v a -> (:>) v w a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lifting t (Schematic Monad u v)
	, Lifting t (Schematic Monad u (v :> w))
	, Lifting u (Schematic Monad v w)
	, Lifting v w
	) => Adaptable w (t :> u :> v :> w) where
	adapt :: w a -> (:>) t (u :> (v :> w)) a
adapt = (:>) u (v :> w) a -> (:>) t (u :> (v :> w)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> w) a -> (:>) t (u :> (v :> w)) a)
-> (w a -> (:>) u (v :> w) a) -> w a -> (:>) t (u :> (v :> w)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v w a -> (:>) u (v :> w) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v w a -> (:>) u (v :> w) a)
-> (w a -> (:>) v w a) -> w a -> (:>) u (v :> w) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. w a -> (:>) v w a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lowering t (Schematic Comonad u (v :< w))
	, Lowering u (Schematic Comonad v w)
	, Bringable v w
	) => Adaptable (t :< u :< v :< w) v where
	adapt :: (:<) t (u :< (v :< w)) a -> v a
adapt = (:<) v w a -> v a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) v w a -> v a)
-> ((:<) t (u :< (v :< w)) a -> (:<) v w a)
-> (:<) t (u :< (v :< w)) a
-> v a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< w) a -> (:<) v w a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< w) a -> (:<) v w a)
-> ((:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a)
-> (:<) t (u :< (v :< w)) a
-> (:<) v w a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u v)
	, Lowering t (Schematic Comonad u (v :< w))
	, Lowering u (Schematic Comonad v w)
	, Lowering v w
	) => Adaptable (t :< u :< v :< w) w where
	adapt :: (:<) t (u :< (v :< w)) a -> w a
adapt = (:<) v w a -> w a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v w a -> w a)
-> ((:<) t (u :< (v :< w)) a -> (:<) v w a)
-> (:<) t (u :< (v :< w)) a
-> w a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< w) a -> (:<) v w a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< w) a -> (:<) v w a)
-> ((:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a)
-> (:<) t (u :< (v :< w)) a
-> (:<) v w a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lifting t (Schematic Monad u (v :> w :> x))
	, Lifting u (Schematic Monad v (w :> x))
	, Lifting v (Schematic Monad w x)
	, Lifting w x
	) => Adaptable x (t :> u :> v :> w :> x) where
	adapt :: x a -> (:>) t (u :> (v :> (w :> x))) a
adapt = (:>) u (v :> (w :> x)) a -> (:>) t (u :> (v :> (w :> x))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> x)) a -> (:>) t (u :> (v :> (w :> x))) a)
-> (x a -> (:>) u (v :> (w :> x)) a)
-> x a
-> (:>) t (u :> (v :> (w :> x))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a)
-> (x a -> (:>) v (w :> x) a) -> x a -> (:>) u (v :> (w :> x)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w x a -> (:>) v (w :> x) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w x a -> (:>) v (w :> x) a)
-> (x a -> (:>) w x a) -> x a -> (:>) v (w :> x) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. x a -> (:>) w x a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lifting t (Schematic Monad u (v :> w :> x))
	, Lifting u (Schematic Monad v (w :> x))
	, Lifting v (Schematic Monad w x)
	, Wrappable w x
	) => Adaptable w (t :> u :> v :> w :> x) where
	adapt :: w a -> (:>) t (u :> (v :> (w :> x))) a
adapt = (:>) u (v :> (w :> x)) a -> (:>) t (u :> (v :> (w :> x))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> x)) a -> (:>) t (u :> (v :> (w :> x))) a)
-> (w a -> (:>) u (v :> (w :> x)) a)
-> w a
-> (:>) t (u :> (v :> (w :> x))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a)
-> (w a -> (:>) v (w :> x) a) -> w a -> (:>) u (v :> (w :> x)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w x a -> (:>) v (w :> x) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w x a -> (:>) v (w :> x) a)
-> (w a -> (:>) w x a) -> w a -> (:>) v (w :> x) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. w a -> (:>) w x a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lowering t (Schematic Comonad u (v :< w :< x))
	, Lowering u (Schematic Comonad v (w :< x))
	, Lowering v (Schematic Comonad w x)
	, Lowering w x
	) => Adaptable (t :< u :< v :< w :< x) x where
	adapt :: (:<) t (u :< (v :< (w :< x))) a -> x a
adapt = (:<) w x a -> x a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w x a -> x a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) w x a)
-> (:<) t (u :< (v :< (w :< x))) a
-> x a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< x) a -> (:<) w x a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< x) a -> (:<) w x a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) v (w :< x) a)
-> (:<) t (u :< (v :< (w :< x))) a
-> (:<) w x a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a)
-> (:<) t (u :< (v :< (w :< x))) a
-> (:<) v (w :< x) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u (v :< w :< x))
	, Lowering u (Schematic Comonad v (w :< x))
	, Lowering v (Schematic Comonad w x)
	, Bringable w x
	) => Adaptable (t :< u :< v :< w :< x) w where
	adapt :: (:<) t (u :< (v :< (w :< x))) a -> w a
adapt = (:<) w x a -> w a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) w x a -> w a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) w x a)
-> (:<) t (u :< (v :< (w :< x))) a
-> w a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< x) a -> (:<) w x a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< x) a -> (:<) w x a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) v (w :< x) a)
-> (:<) t (u :< (v :< (w :< x))) a
-> (:<) w x a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a)
-> ((:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a)
-> (:<) t (u :< (v :< (w :< x))) a
-> (:<) v (w :< x) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y))
	, Lifting u (Schematic Monad v (w :> x :> y))
	, Lifting v (Schematic Monad w (x :> y))
	, Lifting w (Schematic Monad x y)
	, Lifting x y
	) => Adaptable y (t :> u :> v :> w :> x :> y) where
	adapt :: y a -> (:>) t (u :> (v :> (w :> (x :> y)))) a
adapt = (:>) u (v :> (w :> (x :> y))) a
-> (:>) t (u :> (v :> (w :> (x :> y)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> y))) a
 -> (:>) t (u :> (v :> (w :> (x :> y)))) a)
-> (y a -> (:>) u (v :> (w :> (x :> y))) a)
-> y a
-> (:>) t (u :> (v :> (w :> (x :> y)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a)
-> (y a -> (:>) v (w :> (x :> y)) a)
-> y a
-> (:>) u (v :> (w :> (x :> y))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a)
-> (y a -> (:>) w (x :> y) a) -> y a -> (:>) v (w :> (x :> y)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x y a -> (:>) w (x :> y) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x y a -> (:>) w (x :> y) a)
-> (y a -> (:>) x y a) -> y a -> (:>) w (x :> y) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. y a -> (:>) x y a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y))
	, Lifting u (Schematic Monad v (w :> x :> y))
	, Lifting v (Schematic Monad w (x :> y))
	, Lifting w (Schematic Monad x y)
	, Wrappable x y
	) => Adaptable x (t :> u :> v :> w :> x :> y) where
	adapt :: x a -> (:>) t (u :> (v :> (w :> (x :> y)))) a
adapt = (:>) u (v :> (w :> (x :> y))) a
-> (:>) t (u :> (v :> (w :> (x :> y)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> y))) a
 -> (:>) t (u :> (v :> (w :> (x :> y)))) a)
-> (x a -> (:>) u (v :> (w :> (x :> y))) a)
-> x a
-> (:>) t (u :> (v :> (w :> (x :> y)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a)
-> (x a -> (:>) v (w :> (x :> y)) a)
-> x a
-> (:>) u (v :> (w :> (x :> y))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a)
-> (x a -> (:>) w (x :> y) a) -> x a -> (:>) v (w :> (x :> y)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x y a -> (:>) w (x :> y) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x y a -> (:>) w (x :> y) a)
-> (x a -> (:>) x y a) -> x a -> (:>) w (x :> y) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. x a -> (:>) x y a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y))
	, Lowering u (Schematic Comonad v (w :< x :< y))
	, Lowering v (Schematic Comonad w (x :< y))
	, Lowering w (Schematic Comonad x y)
	, Lowering x y
	) => Adaptable (t :< u :< v :< w :< x :< y) y where
	adapt :: (:<) t (u :< (v :< (w :< (x :< y)))) a -> y a
adapt = (:<) x y a -> y a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x y a -> y a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a -> (:<) x y a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> y a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< y) a -> (:<) x y a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< y) a -> (:<) x y a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a -> (:<) w (x :< y) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) x y a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a
    -> (:<) v (w :< (x :< y)) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) w (x :< y) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a
    -> (:<) u (v :< (w :< (x :< y))) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) v (w :< (x :< y)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) u (v :< (w :< (x :< y))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y))
	, Lowering u (Schematic Comonad v (w :< x :< y))
	, Lowering v (Schematic Comonad w (x :< y))
	, Lowering w (Schematic Comonad x y)
	, Bringable x y
	) => Adaptable (t :< u :< v :< w :< x :< y) x where
	adapt :: (:<) t (u :< (v :< (w :< (x :< y)))) a -> x a
adapt = (:<) x y a -> x a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) x y a -> x a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a -> (:<) x y a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> x a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< y) a -> (:<) x y a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< y) a -> (:<) x y a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a -> (:<) w (x :< y) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) x y a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a
    -> (:<) v (w :< (x :< y)) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) w (x :< y) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a)
-> ((:<) t (u :< (v :< (w :< (x :< y)))) a
    -> (:<) u (v :< (w :< (x :< y))) a)
-> (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) v (w :< (x :< y)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) u (v :< (w :< (x :< y))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z))
	, Lifting u (Schematic Monad v (w :> x :> y :> z))
	, Lifting v (Schematic Monad w (x :> y :> z))
	, Lifting w (Schematic Monad x (y :> z))
	, Lifting x (Schematic Monad y z)
	, Lifting y z
	) => Adaptable z (t :> u :> v :> w :> x :> y :> z) where
	adapt :: z a -> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> z)))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> z)))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a)
-> (z a -> (:>) u (v :> (w :> (x :> (y :> z)))) a)
-> z a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> z))) a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> z))) a
 -> (:>) u (v :> (w :> (x :> (y :> z)))) a)
-> (z a -> (:>) v (w :> (x :> (y :> z))) a)
-> z a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a)
-> (z a -> (:>) w (x :> (y :> z)) a)
-> z a
-> (:>) v (w :> (x :> (y :> z))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a)
-> (z a -> (:>) x (y :> z) a) -> z a -> (:>) w (x :> (y :> z)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y z a -> (:>) x (y :> z) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y z a -> (:>) x (y :> z) a)
-> (z a -> (:>) y z a) -> z a -> (:>) x (y :> z) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. z a -> (:>) y z a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z))
	, Lifting u (Schematic Monad v (w :> x :> y :> z))
	, Lifting v (Schematic Monad w (x :> y :> z))
	, Lifting w (Schematic Monad x (y :> z))
	, Lifting x (Schematic Monad y z)
	, Wrappable y z
	) => Adaptable y (t :> u :> v :> w :> x :> y :> z) where
	adapt :: y a -> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> z)))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> z)))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a)
-> (y a -> (:>) u (v :> (w :> (x :> (y :> z)))) a)
-> y a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> z))) a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> z))) a
 -> (:>) u (v :> (w :> (x :> (y :> z)))) a)
-> (y a -> (:>) v (w :> (x :> (y :> z))) a)
-> y a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a)
-> (y a -> (:>) w (x :> (y :> z)) a)
-> y a
-> (:>) v (w :> (x :> (y :> z))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a)
-> (y a -> (:>) x (y :> z) a) -> y a -> (:>) w (x :> (y :> z)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y z a -> (:>) x (y :> z) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y z a -> (:>) x (y :> z) a)
-> (y a -> (:>) y z a) -> y a -> (:>) x (y :> z) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. y a -> (:>) y z a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z))
	, Lowering v (Schematic Comonad w (x :< y :< z))
	, Lowering w (Schematic Comonad x (y :< z))
	, Lowering x (Schematic Comonad y z)
	, Lowering y z
	) => Adaptable (t :< u :< v :< w :< x :< y :< z) z where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a -> z a
adapt = (:<) y z a -> z a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) y z a -> z a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a -> (:<) y z a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> z a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< z) a -> (:<) y z a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< z) a -> (:<) y z a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) x (y :< z) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) y z a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) w (x :< (y :< z)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) x (y :< z) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) v (w :< (x :< (y :< z))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) w (x :< (y :< z)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< z)))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< z)))) a
 -> (:<) v (w :< (x :< (y :< z))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) u (v :< (w :< (x :< (y :< z)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) u (v :< (w :< (x :< (y :< z)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z))
	, Lowering v (Schematic Comonad w (x :< y :< z))
	, Lowering w (Schematic Comonad x (y :< z))
	, Lowering x (Schematic Comonad y z)
	, Bringable y z
	) => Adaptable (t :< u :< v :< w :< x :< y :< z) y where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a -> y a
adapt = (:<) y z a -> y a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) y z a -> y a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a -> (:<) y z a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> y a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< z) a -> (:<) y z a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< z) a -> (:<) y z a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) x (y :< z) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) y z a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) w (x :< (y :< z)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) x (y :< z) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) v (w :< (x :< (y :< z))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) w (x :< (y :< z)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< z)))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< z)))) a
 -> (:<) v (w :< (x :< (y :< z))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
    -> (:<) u (v :< (w :< (x :< (y :< z)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< z))))) a
-> (:<) u (v :< (w :< (x :< (y :< z)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z :> f))
	, Lifting u (Schematic Monad v (w :> x :> y :> z :> f))
	, Lifting v (Schematic Monad w (x :> y :> z :> f))
	, Lifting w (Schematic Monad x (y :> z :> f))
	, Lifting x (Schematic Monad y (z :> f))
	, Lifting y (Schematic Monad z f)
	, Lifting z f
	) => Adaptable f (t :> u :> v :> w :> x :> y :> z :> f) where
	adapt :: f a -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a)
-> (f a -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a)
-> f a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> (z :> f)))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> (z :> f)))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a)
-> (f a -> (:>) v (w :> (x :> (y :> (z :> f)))) a)
-> f a
-> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> f))) a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> (z :> f))) a
 -> (:>) v (w :> (x :> (y :> (z :> f)))) a)
-> (f a -> (:>) w (x :> (y :> (z :> f))) a)
-> f a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a)
-> (f a -> (:>) x (y :> (z :> f)) a)
-> f a
-> (:>) w (x :> (y :> (z :> f))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a)
-> (f a -> (:>) y (z :> f) a) -> f a -> (:>) x (y :> (z :> f)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) z f a -> (:>) y (z :> f) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) z f a -> (:>) y (z :> f) a)
-> (f a -> (:>) z f a) -> f a -> (:>) y (z :> f) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. f a -> (:>) z f a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z :> f))
	, Lifting u (Schematic Monad v (w :> x :> y :> z :> f))
	, Lifting v (Schematic Monad w (x :> y :> z :> f))
	, Lifting w (Schematic Monad x (y :> z :> f))
	, Lifting x (Schematic Monad y (z :> f))
	, Lifting y (Schematic Monad z f)
	, Wrappable z f
	) => Adaptable z (t :> u :> v :> w :> x :> y :> z :> f) where
	adapt :: z a -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a)
-> (z a -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a)
-> z a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> (z :> f)))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> (z :> f)))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a)
-> (z a -> (:>) v (w :> (x :> (y :> (z :> f)))) a)
-> z a
-> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> f))) a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> (z :> f))) a
 -> (:>) v (w :> (x :> (y :> (z :> f)))) a)
-> (z a -> (:>) w (x :> (y :> (z :> f))) a)
-> z a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a)
-> (z a -> (:>) x (y :> (z :> f)) a)
-> z a
-> (:>) w (x :> (y :> (z :> f))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a)
-> (z a -> (:>) y (z :> f) a) -> z a -> (:>) x (y :> (z :> f)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) z f a -> (:>) y (z :> f) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) z f a -> (:>) y (z :> f) a)
-> (z a -> (:>) z f a) -> z a -> (:>) y (z :> f) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. z a -> (:>) z f a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z :< f))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z :< f))
	, Lowering v (Schematic Comonad w (x :< y :< z :< f))
	, Lowering w (Schematic Comonad x (y :< z :< f))
	, Lowering x (Schematic Comonad y (z :< f))
	, Lowering y (Schematic Comonad z f)
	, Lowering z f
	) => Adaptable (t :< u :< v :< w :< x :< y :< z :< f) f where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a -> f a
adapt = (:<) z f a -> f a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) z f a -> f a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) z f a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> f a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) y (z :< f) a -> (:<) z f a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) y (z :< f) a -> (:<) z f a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) y (z :< f) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) z f a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) x (y :< (z :< f)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) y (z :< f) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) w (x :< (y :< (z :< f))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) x (y :< (z :< f)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< f)))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< (z :< f)))) a
 -> (:<) w (x :< (y :< (z :< f))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) v (w :< (x :< (y :< (z :< f)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
-> (:<) v (w :< (x :< (y :< (z :< f)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
 -> (:<) v (w :< (x :< (y :< (z :< f)))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) v (w :< (x :< (y :< (z :< f)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z :< f))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z :< f))
	, Lowering v (Schematic Comonad w (x :< y :< z :< f))
	, Lowering w (Schematic Comonad x (y :< z :< f))
	, Lowering x (Schematic Comonad y (z :< f))
	, Lowering y (Schematic Comonad z f)
	, Bringable z f
	) => Adaptable (t :< u :< v :< w :< x :< y :< z :< f) z where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a -> z a
adapt = (:<) z f a -> z a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) z f a -> z a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) z f a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> z a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) y (z :< f) a -> (:<) z f a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) y (z :< f) a -> (:<) z f a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) y (z :< f) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) z f a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) x (y :< (z :< f)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) y (z :< f) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) w (x :< (y :< (z :< f))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) x (y :< (z :< f)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< f)))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< (z :< f)))) a
 -> (:<) w (x :< (y :< (z :< f))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) v (w :< (x :< (y :< (z :< f)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
-> (:<) v (w :< (x :< (y :< (z :< f)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
 -> (:<) v (w :< (x :< (y :< (z :< f)))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
    -> (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) v (w :< (x :< (y :< (z :< f)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< (z :< f)))))) a
-> (:<) u (v :< (w :< (x :< (y :< (z :< f))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z :> f :> h))
	, Lifting u (Schematic Monad v (w :> x :> y :> z :> f :> h))
	, Lifting v (Schematic Monad w (x :> y :> z :> f :> h))
	, Lifting w (Schematic Monad x (y :> z :> f :> h))
	, Lifting x (Schematic Monad y (z :> f :> h))
	, Lifting y (Schematic Monad z (f :> h))
	, Lifting z (Schematic Monad f h)
	, Lifting f h
	) => Adaptable h (t :> u :> v :> w :> x :> y :> z :> f :> h) where
	adapt :: h a -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a)
-> (h a -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a)
-> h a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a)
-> (h a -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a)
-> h a
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> (f :> h)))) a
-> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> (z :> (f :> h)))) a
 -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a)
-> (h a -> (:>) w (x :> (y :> (z :> (f :> h)))) a)
-> h a
-> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> (f :> h))) a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> (z :> (f :> h))) a
 -> (:>) w (x :> (y :> (z :> (f :> h)))) a)
-> (h a -> (:>) x (y :> (z :> (f :> h))) a)
-> h a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a)
-> (h a -> (:>) y (z :> (f :> h)) a)
-> h a
-> (:>) x (y :> (z :> (f :> h))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a)
-> (h a -> (:>) z (f :> h) a) -> h a -> (:>) y (z :> (f :> h)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) f h a -> (:>) z (f :> h) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) f h a -> (:>) z (f :> h) a)
-> (h a -> (:>) f h a) -> h a -> (:>) z (f :> h) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. h a -> (:>) f h a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift

instance
	( Lifting t (Schematic Monad u (v :> w :> x :> y :> z :> f :> h))
	, Lifting u (Schematic Monad v (w :> x :> y :> z :> f :> h))
	, Lifting v (Schematic Monad w (x :> y :> z :> f :> h))
	, Lifting w (Schematic Monad x (y :> z :> f :> h))
	, Lifting x (Schematic Monad y (z :> f :> h))
	, Lifting y (Schematic Monad z (f :> h))
	, Lifting z (Schematic Monad f h)
	, Wrappable f h
	) => Adaptable f (t :> u :> v :> w :> x :> y :> z :> f :> h) where
	adapt :: f a -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
adapt = (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
 -> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a)
-> (f a -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a)
-> f a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a)
-> (f a -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a)
-> f a
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> (f :> h)))) a
-> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) w (x :> (y :> (z :> (f :> h)))) a
 -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a)
-> (f a -> (:>) w (x :> (y :> (z :> (f :> h)))) a)
-> f a
-> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> (f :> h))) a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) x (y :> (z :> (f :> h))) a
 -> (:>) w (x :> (y :> (z :> (f :> h)))) a)
-> (f a -> (:>) x (y :> (z :> (f :> h))) a)
-> f a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a)
-> (f a -> (:>) y (z :> (f :> h)) a)
-> f a
-> (:>) x (y :> (z :> (f :> h))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a)
-> (f a -> (:>) z (f :> h) a) -> f a -> (:>) y (z :> (f :> h)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:>) f h a -> (:>) z (f :> h) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Liftable cat t, Covariant cat cat u) =>
cat (u a) (t u a)
lift ((:>) f h a -> (:>) z (f :> h) a)
-> (f a -> (:>) f h a) -> f a -> (:>) z (f :> h) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. f a -> (:>) f h a
forall (t :: * -> *) (u :: * -> *).
(Monadic t, Pointable u) =>
t ~> (t :> u)
wrap

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z :< f :< h))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z :< f :< h))
	, Lowering v (Schematic Comonad w (x :< y :< z :< f :< h))
	, Lowering w (Schematic Comonad x (y :< z :< f :< h))
	, Lowering x (Schematic Comonad y (z :< f :< h))
	, Lowering y (Schematic Comonad z (f :< h))
	, Lowering z (Schematic Comonad f h)
	, Lowering f h
	) => Adaptable (t :< u :< v :< w :< x :< y :< z :< f :< h) h where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a -> h a
adapt = (:<) f h a -> h a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) f h a -> h a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) f h a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> h a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) z (f :< h) a -> (:<) f h a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) z (f :< h) a -> (:<) f h a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) z (f :< h) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) f h a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) y (z :< (f :< h)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) z (f :< h) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) x (y :< (z :< (f :< h))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) y (z :< (f :< h)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< (f :< h)))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< (z :< (f :< h)))) a
 -> (:<) x (y :< (z :< (f :< h))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) w (x :< (y :< (z :< (f :< h)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
-> (:<) w (x :< (y :< (z :< (f :< h)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
 -> (:<) w (x :< (y :< (z :< (f :< h)))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) w (x :< (y :< (z :< (f :< h)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
-> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
 -> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance
	( Lowering t (Schematic Comonad u (v :< w :< x :< y :< z :< f :< h))
	, Lowering u (Schematic Comonad v (w :< x :< y :< z :< f :< h))
	, Lowering v (Schematic Comonad w (x :< y :< z :< f :< h))
	, Lowering w (Schematic Comonad x (y :< z :< f :< h))
	, Lowering x (Schematic Comonad y (z :< f :< h))
	, Lowering y (Schematic Comonad z (f :< h))
	, Lowering z (Schematic Comonad f h)
	, Bringable f h
	) => Adaptable (t :< u :< v :< w :< x :< y :< z :< f :< h) f where
	adapt :: (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a -> f a
adapt = (:<) f h a -> f a
forall (t :: * -> *) (u :: * -> *).
(Comonadic t, Extractable u) =>
(t :< u) ~> t
bring ((:<) f h a -> f a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) f h a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> f a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) z (f :< h) a -> (:<) f h a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) z (f :< h) a -> (:<) f h a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) z (f :< h) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) f h a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) y (z :< (f :< h)) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) z (f :< h) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) x (y :< (z :< (f :< h))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) y (z :< (f :< h)) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< (f :< h)))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) w (x :< (y :< (z :< (f :< h)))) a
 -> (:<) x (y :< (z :< (f :< h))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) w (x :< (y :< (z :< (f :< h)))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
-> (:<) w (x :< (y :< (z :< (f :< h)))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
 -> (:<) w (x :< (y :< (z :< (f :< h)))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) w (x :< (y :< (z :< (f :< h)))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
-> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower ((:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
 -> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a)
-> ((:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
    -> (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a)
-> (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) v (w :< (x :< (y :< (z :< (f :< h))))) a
forall (m :: * -> * -> *) b c a.
Semigroupoid m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< (y :< (z :< (f :< h))))))) a
-> (:<) u (v :< (w :< (x :< (y :< (z :< (f :< h)))))) a
forall (cat :: * -> * -> *) (t :: (* -> *) -> * -> *) (u :: * -> *)
       a.
(Lowerable cat t, Covariant cat cat u) =>
cat (t u a) (u a)
lower

instance (Covariant (->) (->) u, Hoistable ((:>) t), Adaptable u u') => Adaptable (t :> u) (t :> u') where
	adapt :: (:>) t u a -> (:>) t u' a
adapt = (forall a. u a -> u' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. u a -> u' a) -> (:>) t u a -> (:>) t u' a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) v
	, Covariant (->) (->) (Schematic Monad u v)
	, Hoistable ((:>) (t :> u))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Adaptable v v'
	) => Adaptable (t :> u :> v) (t :> u :> v') where
	adapt :: (:>) t (u :> v) a -> (:>) t (u :> v') a
adapt = ((forall a. v a -> v' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. v a -> v' a) -> (:>) u v a -> (:>) u v' a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) u v a -> (:>) u v' a)
-> (:>) t (u :> v) a -> (:>) t (u :> v') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) u
	, Covariant (->) (->) v
	, Covariant (->) (->) w
	, Covariant (->) (->) (Schematic Monad u v)
	, Covariant (->) (->) (Schematic Monad u (v :> w))
	, Covariant (->) (->) (Schematic Monad v w)
	, Hoistable ((:>) (t :> u :> v))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Adaptable w w'
	) => Adaptable (t :> u :> v :> w) (t :> u :> v :> w') where
	adapt :: (:>) t (u :> (v :> w)) a -> (:>) t (u :> (v :> w')) a
adapt = (((forall a. w a -> w' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. w a -> w' a) -> (:>) v w a -> (:>) v w' a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) v w a -> (:>) v w' a)
-> (:>) u (v :> w) a -> (:>) u (v :> w') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) u (v :> w) a -> (:>) u (v :> w') a)
-> (:>) t (u :> (v :> w)) a -> (:>) t (u :> (v :> w')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) x
	, Covariant (->) (->) (Schematic Monad u (v :> (w :> x)))
	, Covariant (->) (->) (Schematic Monad v (w :> x))
	, Covariant (->) (->) (Schematic Monad w x)
	, Hoistable ((:>) (t :> u :> v))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Hoistable (Schematic Monad w)
	, Adaptable x x'
	) => Adaptable (t :> u :> v :> w :> x) (t :> u :> v :> w :> x') where
	adapt :: (:>) t (u :> (v :> (w :> x))) a -> (:>) t (u :> (v :> (w :> x'))) a
adapt = (((forall a. (:>) w x a -> (:>) w x' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. (:>) w x a -> (:>) w x' a)
-> (:>) v (w :> x) a -> (:>) v (w :> x') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) v (w :> x) a -> (:>) v (w :> x') a)
-> (:>) u (v :> (w :> x)) a -> (:>) u (v :> (w :> x')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) u (v :> (w :> x)) a -> (:>) u (v :> (w :> x')) a)
-> (:>) t (u :> (v :> (w :> x))) a
-> (:>) t (u :> (v :> (w :> x'))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) y
	, Covariant (->) (->) (Schematic Monad u (v :> (w :> (x :> y))))
	, Covariant (->) (->) (Schematic Monad v (w :> (x :> y)))
	, Covariant (->) (->) (Schematic Monad w (x :> y))
	, Covariant (->) (->) (Schematic Monad x y)
	, Hoistable ((:>) (t :> u :> v :> w))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Hoistable (Schematic Monad w)
	, Hoistable (Schematic Monad x)
	, Adaptable y y'
	) => Adaptable (t :> u :> v :> w :> x :> y) (t :> u :> v :> w :> x :> y') where
	adapt :: (:>) t (u :> (v :> (w :> (x :> y)))) a
-> (:>) t (u :> (v :> (w :> (x :> y')))) a
adapt = ((((forall a. (:>) x y a -> (:>) x y' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. (:>) x y a -> (:>) x y' a)
-> (:>) w (x :> y) a -> (:>) w (x :> y') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) w (x :> y) a -> (:>) w (x :> y') a)
-> (:>) v (w :> (x :> y)) a -> (:>) v (w :> (x :> y')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) v (w :> (x :> y)) a -> (:>) v (w :> (x :> y')) a)
-> (:>) u (v :> (w :> (x :> y))) a
-> (:>) u (v :> (w :> (x :> y'))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) u (v :> (w :> (x :> y))) a
 -> (:>) u (v :> (w :> (x :> y'))) a)
-> (:>) t (u :> (v :> (w :> (x :> y)))) a
-> (:>) t (u :> (v :> (w :> (x :> y')))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) z
	, Covariant (->) (->) (Schematic Monad u (v :> (w :> (x :> (y :> z)))))
	, Covariant (->) (->) (Schematic Monad v (w :> (x :> (y :> z))))
	, Covariant (->) (->) (Schematic Monad w (x :> (y :> z)))
	, Covariant (->) (->) (Schematic Monad x (y :> z))
	, Covariant (->) (->) (Schematic Monad y z)
	, Hoistable ((:>) (t :> u :> v :> w))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Hoistable (Schematic Monad w)
	, Hoistable (Schematic Monad x)
	, Hoistable (Schematic Monad y)
	, Adaptable z z'
	) => Adaptable (t :> u :> v :> w :> x :> y :> z)
		(t :> u :> v :> w :> x :> y :> z') where
	adapt :: (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z'))))) a
adapt = (((((forall a. (:>) y z a -> (:>) y z' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. (:>) y z a -> (:>) y z' a)
-> (:>) x (y :> z) a -> (:>) x (y :> z') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) x (y :> z) a -> (:>) x (y :> z') a)
-> (:>) w (x :> (y :> z)) a -> (:>) w (x :> (y :> z')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) w (x :> (y :> z)) a -> (:>) w (x :> (y :> z')) a)
-> (:>) v (w :> (x :> (y :> z))) a
-> (:>) v (w :> (x :> (y :> z'))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) v (w :> (x :> (y :> z))) a
 -> (:>) v (w :> (x :> (y :> z'))) a)
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
-> (:>) u (v :> (w :> (x :> (y :> z')))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) u (v :> (w :> (x :> (y :> z)))) a
 -> (:>) u (v :> (w :> (x :> (y :> z')))) a)
-> (:>) t (u :> (v :> (w :> (x :> (y :> z))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> z'))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) f
	, Covariant (->) (->) (Schematic Monad u (v :> (w :> (x :> (y :> (z :> f))))))
	, Covariant (->) (->) (Schematic Monad v (w :> (x :> (y :> (z :> f)))))
	, Covariant (->) (->) (Schematic Monad w (x :> (y :> (z :> f))))
	, Covariant (->) (->) (Schematic Monad x (y :> (z :> f)))
	, Covariant (->) (->) (Schematic Monad y (z :> f))
	, Covariant (->) (->) (Schematic Monad z f)
	, Hoistable ((:>) (t :> u :> v :> w))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Hoistable (Schematic Monad w)
	, Hoistable (Schematic Monad x)
	, Hoistable (Schematic Monad y)
	, Hoistable (Schematic Monad z)
	, Adaptable f f'
	) => Adaptable (t :> u :> v :> w :> x :> y :> z :> f)
		(t :> u :> v :> w :> x :> y :> z :> f') where
	adapt :: (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f')))))) a
adapt = ((((((forall a. (:>) z f a -> (:>) z f' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. (:>) z f a -> (:>) z f' a)
-> (:>) y (z :> f) a -> (:>) y (z :> f') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) y (z :> f) a -> (:>) y (z :> f') a)
-> (:>) x (y :> (z :> f)) a -> (:>) x (y :> (z :> f')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) x (y :> (z :> f)) a -> (:>) x (y :> (z :> f')) a)
-> (:>) w (x :> (y :> (z :> f))) a
-> (:>) w (x :> (y :> (z :> f'))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) w (x :> (y :> (z :> f))) a
 -> (:>) w (x :> (y :> (z :> f'))) a)
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
-> (:>) v (w :> (x :> (y :> (z :> f')))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) v (w :> (x :> (y :> (z :> f)))) a
 -> (:>) v (w :> (x :> (y :> (z :> f')))) a)
-> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> f'))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> f'))))) a)
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f)))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> f')))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)

instance
	( Covariant (->) (->) h
	, Covariant (->) (->) (Schematic Monad u (v :> (w :> (x :> (y :> (z :> (f :> h)))))))
	, Covariant (->) (->) (Schematic Monad v (w :> (x :> (y :> (z :> (f :> h))))))
	, Covariant (->) (->) (Schematic Monad w (x :> (y :> (z :> (f :> h)))))
	, Covariant (->) (->) (Schematic Monad x (y :> (z :> (f :> h))))
	, Covariant (->) (->) (Schematic Monad y (z :> (f :> h)))
	, Covariant (->) (->) (Schematic Monad z (f :> h))
	, Covariant (->) (->) (Schematic Monad f h)
	, Hoistable ((:>) (t :> u :> v :> w))
	, Hoistable (Schematic Monad t)
	, Hoistable (Schematic Monad u)
	, Hoistable (Schematic Monad v)
	, Hoistable (Schematic Monad w)
	, Hoistable (Schematic Monad x)
	, Hoistable (Schematic Monad y)
	, Hoistable (Schematic Monad z)
	, Hoistable (Schematic Monad f)
	, Adaptable h h'
	) => Adaptable (t :> u :> v :> w :> x :> y :> z :> f :> h)
		(t :> u :> v :> w :> x :> y :> z :> f :> h') where
	adapt :: (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h'))))))) a
adapt = (((((((forall a. (:>) f h a -> (:>) f h' a
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (forall a. (:>) f h a -> (:>) f h' a)
-> (:>) z (f :> h) a -> (:>) z (f :> h') a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) z (f :> h) a -> (:>) z (f :> h') a)
-> (:>) y (z :> (f :> h)) a -> (:>) y (z :> (f :> h')) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a. (:>) y (z :> (f :> h)) a -> (:>) y (z :> (f :> h')) a)
-> (:>) x (y :> (z :> (f :> h))) a
-> (:>) x (y :> (z :> (f :> h'))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) x (y :> (z :> (f :> h))) a
 -> (:>) x (y :> (z :> (f :> h'))) a)
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
-> (:>) w (x :> (y :> (z :> (f :> h')))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) w (x :> (y :> (z :> (f :> h)))) a
 -> (:>) w (x :> (y :> (z :> (f :> h')))) a)
-> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
-> (:>) v (w :> (x :> (y :> (z :> (f :> h'))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a
 -> (:>) v (w :> (x :> (y :> (z :> (f :> h'))))) a)
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
-> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h')))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\) (forall a.
 (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a
 -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h')))))) a)
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))) a
-> (:>) t (u :> (v :> (w :> (x :> (y :> (z :> (f :> h'))))))) a
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant (->) (->) u) =>
(u ~> v) -> t u ~> t v
/|\)