module Control.Joint.Abilities.Adaptable where import "transformers" Control.Monad.Trans.Class (MonadTrans (lift)) import Control.Joint.Core (type (~>)) import Control.Joint.Abilities.Interpreted (Interpreted (run)) import Control.Joint.Abilities.Transformer (Transformer (build), Schema, (:>) (T, trans)) class Adaptable (eff :: * -> *) (schema :: * -> *) where {-# MINIMAL adapt #-} adapt :: eff ~> schema type Embedding t u = (Transformer t, Monad u) type Building t u = (Transformer t, Applicative u) instance Adaptable t t where adapt :: t a -> t a adapt = t a -> t a forall a. a -> a id instance (Monad u, MonadTrans ((:>) t)) => Adaptable u (t :> u) where adapt :: u a -> (:>) t u a adapt = u a -> (:>) t u a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance Building t u => Adaptable t (t :> u) where adapt :: t a -> (:>) t u a adapt = t a -> (:>) t u a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u v) , MonadTrans ((:>) t) , Building 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) u v a -> (:>) t (u :> v) a) -> (u a -> (:>) u v a) -> u a -> (:>) t (u :> v) a forall b c a. (b -> c) -> (a -> b) -> a -> c . u a -> (:>) u v a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u v) , Embedding u v , MonadTrans ((:>) t) , MonadTrans ((:>) u) ) => Adaptable v (t :> u :> v) where adapt :: v a -> (:>) t (u :> v) a adapt = (:>) u v a -> (:>) t (u :> v) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) u v a -> (:>) t (u :> v) a) -> (v a -> (:>) u v a) -> v a -> (:>) t (u :> v) a forall b c a. (b -> c) -> (a -> b) -> a -> c . v a -> (:>) u v a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance ( Embedding t (Schema u (v :> w)) , Embedding u (Schema v w) , MonadTrans ((:>) t) , MonadTrans ((:>) u) , Building 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v w a -> (:>) u (v :> w) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) v w a -> (:>) u (v :> w) a) -> (v a -> (:>) v w a) -> v a -> (:>) u (v :> w) a forall b c a. (b -> c) -> (a -> b) -> a -> c . v a -> (:>) v w a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u v) , Embedding t (Schema u (v :> w)) , Embedding u (Schema v w) , Embedding v w , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v w a -> (:>) u (v :> w) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) v w a -> (:>) u (v :> w) a) -> (w a -> (:>) v w a) -> w a -> (:>) u (v :> w) a forall b c a. (b -> c) -> (a -> b) -> a -> c . w a -> (:>) v w a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance (Embedding t (Schema u (v :> w :> x)) , Embedding u (Schema v (w :> x)) , Embedding v (Schema w x) , Embedding w x , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w x a -> (:>) v (w :> x) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) w x a -> (:>) v (w :> x) a) -> (x a -> (:>) w x a) -> x a -> (:>) v (w :> x) a forall b c a. (b -> c) -> (a -> b) -> a -> c . x a -> (:>) w x a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance (Embedding t (Schema u (v :> w :> x)) , Embedding u (Schema v (w :> x)) , Embedding v (Schema w x) , Building w x , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> x) a -> (:>) u (v :> (w :> x)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w x a -> (:>) v (w :> x) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) w x a -> (:>) v (w :> x) a) -> (w a -> (:>) w x a) -> w a -> (:>) v (w :> x) a forall b c a. (b -> c) -> (a -> b) -> a -> c . w a -> (:>) w x a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u (v :> w :> x :> y)) , Embedding u (Schema v (w :> x :> y)) , Embedding v (Schema w (x :> y)) , Embedding w (Schema x y) , Embedding x y , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x y a -> (:>) w (x :> y) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) x y a -> (:>) w (x :> y) a) -> (y a -> (:>) x y a) -> y a -> (:>) w (x :> y) a forall b c a. (b -> c) -> (a -> b) -> a -> c . y a -> (:>) x y a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance ( Embedding t (Schema u (v :> w :> x :> y)) , Embedding u (Schema v (w :> x :> y)) , Embedding v (Schema w (x :> y)) , Embedding w (Schema x y) , Building x y , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> y)) a -> (:>) u (v :> (w :> (x :> y))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> y) a -> (:>) v (w :> (x :> y)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x y a -> (:>) w (x :> y) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) x y a -> (:>) w (x :> y) a) -> (x a -> (:>) x y a) -> x a -> (:>) w (x :> y) a forall b c a. (b -> c) -> (a -> b) -> a -> c . x a -> (:>) x y a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u (v :> w :> x :> y :> z)) , Embedding u (Schema v (w :> x :> y :> z)) , Embedding v (Schema w (x :> y :> z)) , Embedding w (Schema x (y :> z)) , Embedding x (Schema y z) , Embedding y z , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) , MonadTrans ((:>) y) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> z))) a -> (:>) u (v :> (w :> (x :> (y :> z)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y z a -> (:>) x (y :> z) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) y z a -> (:>) x (y :> z) a) -> (z a -> (:>) y z a) -> z a -> (:>) x (y :> z) a forall b c a. (b -> c) -> (a -> b) -> a -> c . z a -> (:>) y z a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance ( Embedding t (Schema u (v :> w :> x :> y :> z)) , Embedding u (Schema v (w :> x :> y :> z)) , Embedding v (Schema w (x :> y :> z)) , Embedding w (Schema x (y :> z)) , Embedding x (Schema y z) , Building y z , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> z))) a -> (:>) u (v :> (w :> (x :> (y :> z)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> z)) a -> (:>) v (w :> (x :> (y :> z))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> z) a -> (:>) w (x :> (y :> z)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y z a -> (:>) x (y :> z) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) y z a -> (:>) x (y :> z) a) -> (y a -> (:>) y z a) -> y a -> (:>) x (y :> z) a forall b c a. (b -> c) -> (a -> b) -> a -> c . y a -> (:>) y z a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u (v :> w :> x :> y :> z :> f)) , Embedding u (Schema v (w :> x :> y :> z :> f)) , Embedding v (Schema w (x :> y :> z :> f)) , Embedding w (Schema x (y :> z :> f)) , Embedding x (Schema y (z :> f)) , Embedding y (Schema z f) , Embedding z f , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) , MonadTrans ((:>) y) , MonadTrans ((:>) z) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> (z :> f)))) a -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> (z :> f))) a -> (:>) v (w :> (x :> (y :> (z :> f)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) z f a -> (:>) y (z :> f) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) z f a -> (:>) y (z :> f) a) -> (f a -> (:>) z f a) -> f a -> (:>) y (z :> f) a forall b c a. (b -> c) -> (a -> b) -> a -> c . f a -> (:>) z f a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance ( Embedding t (Schema u (v :> w :> x :> y :> z :> f)) , Embedding u (Schema v (w :> x :> y :> z :> f)) , Embedding v (Schema w (x :> y :> z :> f)) , Embedding w (Schema x (y :> z :> f)) , Embedding x (Schema y (z :> f)) , Embedding y (Schema z f) , Building z f , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) , MonadTrans ((:>) y) , MonadTrans ((:>) z) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> (z :> f)))) a -> (:>) u (v :> (w :> (x :> (y :> (z :> f))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> (z :> f))) a -> (:>) v (w :> (x :> (y :> (z :> f)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> (z :> f)) a -> (:>) w (x :> (y :> (z :> f))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y (z :> f) a -> (:>) x (y :> (z :> f)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) z f a -> (:>) y (z :> f) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) z f a -> (:>) y (z :> f) a) -> (z a -> (:>) z f a) -> z a -> (:>) y (z :> f) a forall b c a. (b -> c) -> (a -> b) -> a -> c . z a -> (:>) z f a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build instance ( Embedding t (Schema u (v :> w :> x :> y :> z :> f :> h)) , Embedding u (Schema v (w :> x :> y :> z :> f :> h)) , Embedding v (Schema w (x :> y :> z :> f :> h)) , Embedding w (Schema x (y :> z :> f :> h)) , Embedding x (Schema y (z :> f :> h)) , Embedding y (Schema z (f :> h)) , Embedding z (Schema f h) , Embedding f h , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) , MonadTrans ((:>) y) , MonadTrans ((:>) z) , MonadTrans ((:>) f) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> (z :> (f :> h)))) a -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> (z :> (f :> h))) a -> (:>) w (x :> (y :> (z :> (f :> h)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) f h a -> (:>) z (f :> h) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) f h a -> (:>) z (f :> h) a) -> (h a -> (:>) f h a) -> h a -> (:>) z (f :> h) a forall b c a. (b -> c) -> (a -> b) -> a -> c . h a -> (:>) f h a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance ( Embedding t (Schema u (v :> w :> x :> y :> z :> f :> h)) , Embedding u (Schema v (w :> x :> y :> z :> f :> h)) , Embedding v (Schema w (x :> y :> z :> f :> h)) , Embedding w (Schema x (y :> z :> f :> h)) , Embedding x (Schema y (z :> f :> h)) , Embedding y (Schema z (f :> h)) , Embedding z (Schema f h) , Building f h , MonadTrans ((:>) t) , MonadTrans ((:>) u) , MonadTrans ((:>) v) , MonadTrans ((:>) w) , MonadTrans ((:>) x) , MonadTrans ((:>) y) , MonadTrans ((:>) z) ) => 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 :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a -> (:>) u (v :> (w :> (x :> (y :> (z :> (f :> h)))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) w (x :> (y :> (z :> (f :> h)))) a -> (:>) v (w :> (x :> (y :> (z :> (f :> h))))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) x (y :> (z :> (f :> h))) a -> (:>) w (x :> (y :> (z :> (f :> h)))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) y (z :> (f :> h)) a -> (:>) x (y :> (z :> (f :> h))) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) z (f :> h) a -> (:>) y (z :> (f :> h)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m 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 b c a. (b -> c) -> (a -> b) -> a -> c . (:>) f h a -> (:>) z (f :> h) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((:>) f h a -> (:>) z (f :> h) a) -> (f a -> (:>) f h a) -> f a -> (:>) z (f :> h) a forall b c a. (b -> c) -> (a -> b) -> a -> c . f a -> (:>) f h a forall (t :: * -> *) (u :: * -> *). (Transformer t, Applicative u) => t ~> (t :> u) build