{-# LANGUAGE UndecidableInstances #-}

module Pandora.Paradigm.Controlflow.Effect.Adaptable where

import Pandora.Core.Functor (type (~>))
import Pandora.Pattern.Category (identity, (.))
import Pandora.Pattern.Functor.Covariant (Covariant)
import Pandora.Pattern.Functor.Pointable (Pointable)
import Pandora.Pattern.Functor.Extractable (Extractable)
import Pandora.Pattern.Functor.Bindable (Bindable ((>>=)))
import Pandora.Pattern.Functor.Comonad (Comonad)
import Pandora.Pattern.Functor.Monad (Monad)
import Pandora.Pattern.Transformer (Liftable (lift), Lowerable (lower), Hoistable (hoist))
import Pandora.Paradigm.Controlflow.Effect.Interpreted (Schematic)
import Pandora.Paradigm.Controlflow.Effect.Transformer (Transformer, wrap, bring, (:>), (:<))

infixl 1 >>=:>
infixr 1 <:=<<

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

type Lifting t u = (Transformer Monad t, Liftable (Schematic Monad t), Covariant u)
type Lowering t u = (Transformer Comonad t, Lowerable (Schematic Comonad t), Covariant u)
type Wrappable t u = (Transformer Monad t, Pointable u)
type Bringable t u = (Transformer Comonad t, Extractable u)

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

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

instance (Covariant (t :> u), 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 (Covariant (t :> u), Lowering t u) => Adaptable (t :< u) u where
	adapt :: (:<) t u a -> u a
adapt = (:<) t u a -> u a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance (Covariant (t :< u), 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
	( Covariant (t :> u :> v)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) u v a -> (:>) t (u :> v) a)
-> (u a -> (:>) u v a) -> u a -> (:>) t (u :> v) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :> u :> v)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) u v a -> (:>) t (u :> v) a)
-> (v a -> (:>) u v a) -> v a -> (:>) t (u :> v) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. v a -> (:>) u v a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :< u :< v)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< v) a -> (:<) u v a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower ((:<) u v a -> v a)
-> ((:<) t (u :< v) a -> (:<) u v a) -> (:<) t (u :< v) a -> v a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< v) a -> (:<) u v a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v w a -> (:>) u (v :> w) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) v w a -> (:>) u (v :> w) a)
-> (v a -> (:>) v w a) -> v a -> (:>) u (v :> w) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :> u :> v :> w)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v w a -> (:>) u (v :> w) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) v w a -> (:>) u (v :> w) a)
-> (w a -> (:>) v w a) -> w a -> (:>) u (v :> w) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. w a -> (:>) v w a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :< u :< v :< w)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< w) a -> (:<) v w a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< w) a -> (:<) v w a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< w)) a -> (:<) u (v :< w) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w :> x)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w x a -> (:>) v (w :> x) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) w x a -> (:>) v (w :> x) a)
-> (x a -> (:>) w x a) -> x a -> (:>) v (w :> x) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. x a -> (:>) w x a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :> u :> v :> w :> x)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w x a -> (:>) v (w :> x) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) w x a -> (:>) v (w :> x) a)
-> (w a -> (:>) w x a) -> w a -> (:>) v (w :> x) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :< u :< v :< w :< x)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< x) a -> (:<) w x a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w :< x)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< x) a -> (:<) w x a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< x)) a -> (:<) v (w :< x) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< x))) a -> (:<) u (v :< (w :< x)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w :> x :> y)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x y a -> (:>) w (x :> y) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) x y a -> (:>) w (x :> y) a)
-> (y a -> (:>) x y a) -> y a -> (:>) w (x :> y) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. y a -> (:>) x y a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :> u :> v :> w :> x :> y)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x y a -> (:>) w (x :> y) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) x y a -> (:>) w (x :> y) a)
-> (x a -> (:>) x y a) -> x a -> (:>) w (x :> y) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :< u :< v :< w :< x :< y)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< y) a -> (:<) x y a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) u (v :< (w :< (x :< y))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w :< x :< y)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< y) a -> (:<) x y a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< y)) a -> (:<) w (x :< y) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< y))) a -> (:<) v (w :< (x :< y)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) t (u :< (v :< (w :< (x :< y)))) a
-> (:<) u (v :< (w :< (x :< y))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> z))) a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y z a -> (:>) x (y :> z) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) y z a -> (:>) x (y :> z) a)
-> (z a -> (:>) y z a) -> z a -> (:>) x (y :> z) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. z a -> (:>) y z a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) v (w :> (x :> (y :> z))) a
-> (:>) u (v :> (w :> (x :> (y :> z)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y z a -> (:>) x (y :> z) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) y z a -> (:>) x (y :> z) a)
-> (y a -> (:>) y z a) -> y a -> (:>) x (y :> z) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :< u :< v :< w :< x :< y :< z)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< z) a -> (:<) y z a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< z)))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w :< x :< y :< z)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< z) a -> (:<) y z a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< z)) a -> (:<) x (y :< z) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< z))) a -> (:<) w (x :< (y :< z)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) u (v :< (w :< (x :< (y :< z)))) a
-> (:<) v (w :< (x :< (y :< z))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z :> f)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> f))) a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) z f a -> (:>) y (z :> f) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) z f a -> (:>) y (z :> f) a)
-> (f a -> (:>) z f a) -> f a -> (:>) y (z :> f) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. f a -> (:>) z f a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z :> f)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) w (x :> (y :> (z :> f))) a
-> (:>) v (w :> (x :> (y :> (z :> f)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) z f a -> (:>) y (z :> f) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) z f a -> (:>) y (z :> f) a)
-> (z a -> (:>) z f a) -> z a -> (:>) y (z :> f) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :< u :< v :< w :< x :< y :< z :< f)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) y (z :< f) a -> (:<) z f a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< f)))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w :< x :< y :< z :< f)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) y (z :< f) a -> (:<) z f a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< f)) a -> (:<) y (z :< f) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< f))) a -> (:<) x (y :< (z :< f)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) v (w :< (x :< (y :< (z :< f)))) a
-> (:<) w (x :< (y :< (z :< f))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z :> f :> h)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> (f :> h))) a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) f h a -> (:>) z (f :> h) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) f h a -> (:>) z (f :> h) a)
-> (h a -> (:>) f h a) -> h a -> (:>) z (f :> h) a
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. h a -> (:>) f h a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift

instance
	( Covariant (t :> u :> v :> w :> x :> y :> z :> f :> h)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) x (y :> (z :> (f :> h))) a
-> (:>) w (x :> (y :> (z :> (f :> h)))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
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.
Category m =>
m b c -> m a b -> m a c
. (:>) f h a -> (:>) z (f :> h) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Liftable t, Covariant u) =>
u ~> t u
lift ((:>) f h a -> (:>) z (f :> h) a)
-> (f a -> (:>) f h a) -> f a -> (:>) z (f :> h) a
forall (m :: * -> * -> *) b c a.
Category 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
	( Covariant (t :< u :< v :< w :< x :< y :< z :< f :< h)
	, 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) z (f :< h) a -> (:<) f h a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< (f :< h)))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

instance
	( Covariant (t :< u :< v :< w :< x :< y :< z :< f :< h)
	, 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.
Category m =>
m b c -> m a b -> m a c
. (:<) z (f :< h) a -> (:<) f h a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) y (z :< (f :< h)) a -> (:<) z (f :< h) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) x (y :< (z :< (f :< h))) a -> (:<) y (z :< (f :< h)) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category m =>
m b c -> m a b -> m a c
. (:<) w (x :< (y :< (z :< (f :< h)))) a
-> (:<) x (y :< (z :< (f :< h))) a
forall (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
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.
Category 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 (t :: (* -> *) -> * -> *) (u :: * -> *).
(Lowerable t, Covariant u) =>
t u ~> u
lower

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

instance
	( Covariant u
	, 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 = ((u :> v) ~> (u :> v')) -> (t :> (u :> v)) ~> (t :> (u :> v'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist ((v ~> v') -> (u :> v) ~> (u :> v')
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist v ~> v'
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt)

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 = ((u :> (v :> w)) ~> (u :> (v :> w')))
-> (t :> (u :> (v :> w))) ~> (t :> (u :> (v :> w')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> w) ~> (v :> w')) -> (u :> (v :> w)) ~> (u :> (v :> w'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist ((w ~> w') -> (v :> w) ~> (v :> w')
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist w ~> w'
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt))

instance
	( Covariant u, Covariant v, Covariant w, Covariant x
	, Covariant (Schematic Monad u v)
	, Covariant (Schematic Monad u (v :> w))
	, 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 = ((u :> (v :> (w :> x))) ~> (u :> (v :> (w :> x'))))
-> (t :> (u :> (v :> (w :> x)))) ~> (t :> (u :> (v :> (w :> x'))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> (w :> x)) ~> (v :> (w :> x')))
-> (u :> (v :> (w :> x))) ~> (u :> (v :> (w :> x')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((w :> x) ~> (w :> x')) -> (v :> (w :> x)) ~> (v :> (w :> x'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist ((x ~> x') -> (w :> x) ~> (w :> x')
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist x ~> x'
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt)))

instance
	( Covariant u, Covariant v, Covariant w, Covariant x, Covariant y
	, Covariant (Schematic Monad u v)
	, Covariant (Schematic Monad u (v :> w))
	, Covariant (Schematic Monad u (v :> (w :> x)))
	, Covariant (Schematic Monad u (v :> (w :> (x :> y))))
	, Covariant (Schematic Monad v (w :> x))
	, 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 = ((u :> (v :> (w :> (x :> y)))) ~> (u :> (v :> (w :> (x :> y')))))
-> (t :> (u :> (v :> (w :> (x :> y)))))
   ~> (t :> (u :> (v :> (w :> (x :> y')))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> (w :> (x :> y))) ~> (v :> (w :> (x :> y'))))
-> (u :> (v :> (w :> (x :> y)))) ~> (u :> (v :> (w :> (x :> y'))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((w :> (x :> y)) ~> (w :> (x :> y')))
-> (v :> (w :> (x :> y))) ~> (v :> (w :> (x :> y')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((x :> y) ~> (x :> y')) -> (w :> (x :> y)) ~> (w :> (x :> y'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist ((y ~> y') -> (x :> y) ~> (x :> y')
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist y ~> y'
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt))))

instance
	( Covariant u, Covariant v, Covariant w, Covariant x, Covariant y, Covariant z
	, Covariant (Schematic Monad u v)
	, Covariant (Schematic Monad u (v :> w))
	, Covariant (Schematic Monad u (v :> (w :> x)))
	, Covariant (Schematic Monad u (v :> (w :> (x :> y))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> z)))))
	, Covariant (Schematic Monad v (w :> x))
	, Covariant (Schematic Monad v (w :> (x :> y)))
	, Covariant (Schematic Monad v (w :> (x :> (y :> z))))
	, Covariant (Schematic Monad w (x :> y))
	, Covariant (Schematic Monad w (x :> (y :> z)))
	, Covariant (Schematic Monad x y)
	, 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 = ((u :> (v :> (w :> (x :> (y :> z)))))
 ~> (u :> (v :> (w :> (x :> (y :> z'))))))
-> (t :> (u :> (v :> (w :> (x :> (y :> z))))))
   ~> (t :> (u :> (v :> (w :> (x :> (y :> z'))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> (w :> (x :> (y :> z)))) ~> (v :> (w :> (x :> (y :> z')))))
-> (u :> (v :> (w :> (x :> (y :> z)))))
   ~> (u :> (v :> (w :> (x :> (y :> z')))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((w :> (x :> (y :> z))) ~> (w :> (x :> (y :> z'))))
-> (v :> (w :> (x :> (y :> z)))) ~> (v :> (w :> (x :> (y :> z'))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((x :> (y :> z)) ~> (x :> (y :> z')))
-> (w :> (x :> (y :> z))) ~> (w :> (x :> (y :> z')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((y :> z) ~> (y :> z')) -> (x :> (y :> z)) ~> (x :> (y :> z'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (y :> z) ~> (y :> z')
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt))))

instance
	( Covariant u, Covariant v, Covariant w, Covariant x
	, Covariant y, Covariant z, Covariant f
	, Covariant (Schematic Monad u v)
	, Covariant (Schematic Monad u (v :> w))
	, Covariant (Schematic Monad u (v :> (w :> x)))
	, Covariant (Schematic Monad u (v :> (w :> (x :> y))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> z)))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> (z :> f))))))
	, Covariant (Schematic Monad v (w :> x))
	, Covariant (Schematic Monad v (w :> (x :> y)))
	, Covariant (Schematic Monad v (w :> (x :> (y :> z))))
	, Covariant (Schematic Monad v (w :> (x :> (y :> (z :> f)))))
	, Covariant (Schematic Monad w (x :> y))
	, Covariant (Schematic Monad w (x :> (y :> z)))
	, Covariant (Schematic Monad w (x :> (y :> (z :> f))))
	, Covariant (Schematic Monad x y)
	, Covariant (Schematic Monad x (y :> z))
	, Covariant (Schematic Monad x (y :> (z :> f)))
	, Covariant (Schematic Monad y z)
	, 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 = ((u :> (v :> (w :> (x :> (y :> (z :> f))))))
 ~> (u :> (v :> (w :> (x :> (y :> (z :> f')))))))
-> (t :> (u :> (v :> (w :> (x :> (y :> (z :> f)))))))
   ~> (t :> (u :> (v :> (w :> (x :> (y :> (z :> f')))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> (w :> (x :> (y :> (z :> f)))))
 ~> (v :> (w :> (x :> (y :> (z :> f'))))))
-> (u :> (v :> (w :> (x :> (y :> (z :> f))))))
   ~> (u :> (v :> (w :> (x :> (y :> (z :> f'))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((w :> (x :> (y :> (z :> f)))) ~> (w :> (x :> (y :> (z :> f')))))
-> (v :> (w :> (x :> (y :> (z :> f)))))
   ~> (v :> (w :> (x :> (y :> (z :> f')))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((x :> (y :> (z :> f))) ~> (x :> (y :> (z :> f'))))
-> (w :> (x :> (y :> (z :> f)))) ~> (w :> (x :> (y :> (z :> f'))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((y :> (z :> f)) ~> (y :> (z :> f')))
-> (x :> (y :> (z :> f))) ~> (x :> (y :> (z :> f')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((z :> f) ~> (z :> f')) -> (y :> (z :> f)) ~> (y :> (z :> f'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (z :> f) ~> (z :> f')
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt)))))

instance
	( Covariant u, Covariant v, Covariant w, Covariant x
	, Covariant y, Covariant z, Covariant f, Covariant h
	, Covariant (Schematic Monad u v)
	, Covariant (Schematic Monad u (v :> w))
	, Covariant (Schematic Monad u (v :> (w :> x)))
	, Covariant (Schematic Monad u (v :> (w :> (x :> y))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> z)))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> (z :> f))))))
	, Covariant (Schematic Monad u (v :> (w :> (x :> (y :> (z :> (f :> h)))))))
	, Covariant (Schematic Monad v (w :> x))
	, Covariant (Schematic Monad v (w :> (x :> y)))
	, Covariant (Schematic Monad v (w :> (x :> (y :> z))))
	, Covariant (Schematic Monad v (w :> (x :> (y :> (z :> f)))))
	, Covariant (Schematic Monad v (w :> (x :> (y :> (z :> (f :> h))))))
	, Covariant (Schematic Monad w (x :> y))
	, Covariant (Schematic Monad w (x :> (y :> z)))
	, Covariant (Schematic Monad w (x :> (y :> (z :> f))))
	, Covariant (Schematic Monad w (x :> (y :> (z :> (f :> h)))))
	, Covariant (Schematic Monad x y)
	, Covariant (Schematic Monad x (y :> z))
	, Covariant (Schematic Monad x (y :> (z :> f)))
	, Covariant (Schematic Monad x (y :> (z :> (f :> h))))
	, Covariant (Schematic Monad y z)
	, Covariant (Schematic Monad y (z :> f))
	, Covariant (Schematic Monad y (z :> (f :> h)))
	, Covariant (Schematic Monad z f)
	, 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 = ((u :> (v :> (w :> (x :> (y :> (z :> (f :> h)))))))
 ~> (u :> (v :> (w :> (x :> (y :> (z :> (f :> h'))))))))
-> (t :> (u :> (v :> (w :> (x :> (y :> (z :> (f :> h))))))))
   ~> (t :> (u :> (v :> (w :> (x :> (y :> (z :> (f :> h'))))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((v :> (w :> (x :> (y :> (z :> (f :> h))))))
 ~> (v :> (w :> (x :> (y :> (z :> (f :> h')))))))
-> (u :> (v :> (w :> (x :> (y :> (z :> (f :> h)))))))
   ~> (u :> (v :> (w :> (x :> (y :> (z :> (f :> h')))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((w :> (x :> (y :> (z :> (f :> h)))))
 ~> (w :> (x :> (y :> (z :> (f :> h'))))))
-> (v :> (w :> (x :> (y :> (z :> (f :> h))))))
   ~> (v :> (w :> (x :> (y :> (z :> (f :> h'))))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((x :> (y :> (z :> (f :> h)))) ~> (x :> (y :> (z :> (f :> h')))))
-> (w :> (x :> (y :> (z :> (f :> h)))))
   ~> (w :> (x :> (y :> (z :> (f :> h')))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((y :> (z :> (f :> h))) ~> (y :> (z :> (f :> h'))))
-> (x :> (y :> (z :> (f :> h)))) ~> (x :> (y :> (z :> (f :> h'))))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((z :> (f :> h)) ~> (z :> (f :> h')))
-> (y :> (z :> (f :> h))) ~> (y :> (z :> (f :> h')))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (((f :> h) ~> (f :> h')) -> (z :> (f :> h)) ~> (z :> (f :> h'))
forall k (t :: (* -> *) -> k -> *) (u :: * -> *) (v :: * -> *).
(Hoistable t, Covariant u) =>
(u ~> v) -> t u ~> t v
hoist (f :> h) ~> (f :> h')
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt))))))

(>>=:>) :: (Adaptable t u, Bindable u) => u a -> (a -> t b) -> u b
u a
x >>=:> :: u a -> (a -> t b) -> u b
>>=:> a -> t b
f = u a
x u a -> (a -> u b) -> u b
forall (t :: * -> *) a b. Bindable t => t a -> (a -> t b) -> t b
>>= t b -> u b
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (t b -> u b) -> (a -> t b) -> a -> u b
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. a -> t b
f

(<:=<<) :: (Adaptable t u, Bindable u) => (a -> t b) -> u a -> u b
a -> t b
f <:=<< :: (a -> t b) -> u a -> u b
<:=<< u a
x = u a
x u a -> (a -> u b) -> u b
forall (t :: * -> *) a b. Bindable t => t a -> (a -> t b) -> t b
>>= t b -> u b
forall k (t :: k -> *) (u :: k -> *). Adaptable t u => t ~> u
adapt (t b -> u b) -> (a -> t b) -> a -> u b
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. a -> t b
f