{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE StandaloneKindSignatures #-}
module FFunctor.Tannen where
import FFunctor
type Tannen :: FUNCTOR -> FF -> FF
newtype Tannen h ff g x = Tannen { forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) x.
Tannen h ff g x -> h (ff g x)
runTannen :: h (ff g x) }
deriving (forall a b. (a -> b) -> Tannen h ff g a -> Tannen h ff g b)
-> (forall a b. a -> Tannen h ff g b -> Tannen h ff g a)
-> Functor (Tannen h ff g)
forall a b. a -> Tannen h ff g b -> Tannen h ff g a
forall a b. (a -> b) -> Tannen h ff g a -> Tannen h ff g b
forall (f :: FUNCTOR).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) a b.
(Functor h, Functor (ff g)) =>
a -> Tannen h ff g b -> Tannen h ff g a
forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) a b.
(Functor h, Functor (ff g)) =>
(a -> b) -> Tannen h ff g a -> Tannen h ff g b
$cfmap :: forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) a b.
(Functor h, Functor (ff g)) =>
(a -> b) -> Tannen h ff g a -> Tannen h ff g b
fmap :: forall a b. (a -> b) -> Tannen h ff g a -> Tannen h ff g b
$c<$ :: forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) a b.
(Functor h, Functor (ff g)) =>
a -> Tannen h ff g b -> Tannen h ff g a
<$ :: forall a b. a -> Tannen h ff g b -> Tannen h ff g a
Functor
instance (Functor h, FFunctor ff) => FFunctor (Tannen h ff) where
ffmap :: forall (g :: FUNCTOR) (h :: FUNCTOR) x.
(Functor g, Functor h) =>
(g ~> h) -> Tannen h ff g x -> Tannen h ff h x
ffmap g ~> h
t = h (ff h x) -> Tannen h ff h x
forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) x.
h (ff g x) -> Tannen h ff g x
Tannen (h (ff h x) -> Tannen h ff h x)
-> (Tannen h ff g x -> h (ff h x))
-> Tannen h ff g x
-> Tannen h ff h x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ff g x -> ff h x) -> h (ff g x) -> h (ff h x)
forall a b. (a -> b) -> h a -> h b
forall (f :: FUNCTOR) a b. Functor f => (a -> b) -> f a -> f b
fmap ((g ~> h) -> ff g x -> ff h x
forall (g :: FUNCTOR) (h :: FUNCTOR) x.
(Functor g, Functor h) =>
(g ~> h) -> ff g x -> ff h x
forall (ff :: FF) (g :: FUNCTOR) (h :: FUNCTOR) x.
(FFunctor ff, Functor g, Functor h) =>
(g ~> h) -> ff g x -> ff h x
ffmap g x -> h x
g ~> h
t) (h (ff g x) -> h (ff h x))
-> (Tannen h ff g x -> h (ff g x)) -> Tannen h ff g x -> h (ff h x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tannen h ff g x -> h (ff g x)
forall (h :: FUNCTOR) (ff :: FF) (g :: FUNCTOR) x.
Tannen h ff g x -> h (ff g x)
runTannen