module Data.HFunctor.Final (
    Final(..)
  , fromFinal, toFinal
  , FreeOf(..), finalizing
  , hoistFinalC
  , liftFinal0
  , liftFinal1
  , liftFinal2
  ) where
import           Control.Applicative
import           Control.Applicative.Free
import           Control.Applicative.Lift
import           Control.Applicative.ListF
import           Control.Monad
import           Control.Monad.Freer.Church hiding         (toFree)
import           Control.Monad.Reader
import           Control.Monad.Trans.Identity
import           Control.Natural
import           Control.Natural.IsoF
import           Data.Constraint.Trivial
import           Data.Functor.Apply.Free
import           Data.Functor.Bind
import           Data.Functor.Contravariant
import           Data.Functor.Contravariant.Conclude
import           Data.Functor.Contravariant.Decide
import           Data.Functor.Contravariant.Divise
import           Data.Functor.Contravariant.Divisible
import           Data.Functor.Contravariant.Divisible.Free
import           Data.Functor.Coyoneda
import           Data.Functor.Invariant
import           Data.Functor.Invariant.Inplicative
import           Data.Functor.Invariant.Inplicative.Free
import           Data.Functor.Invariant.Internative
import           Data.Functor.Invariant.Internative.Free
import           Data.Functor.Plus
import           Data.HFunctor
import           Data.HFunctor.Interpret
import           Data.Kind
import           Data.Pointed
import qualified Control.Alternative.Free                  as Alt
import qualified Control.Applicative.Free.Fast             as FAF
import qualified Data.Functor.Contravariant.Coyoneda       as CCY
newtype Final c f a = Final
    { forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal :: forall g. c g => (forall x. f x -> g x) -> g a }
liftFinal0
    :: (forall g. c g => g a)
    -> Final c f a
liftFinal0 :: forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 forall (g :: k -> *). c g => g a
x = (forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k -> *).
  c g =>
  (forall (x :: k). f x -> g x) -> g a)
 -> Final c f a)
-> (forall (g :: k -> *).
    c g =>
    (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
forall a b. (a -> b) -> a -> b
$ \forall (x :: k). f x -> g x
_ -> g a
forall (g :: k -> *). c g => g a
x
liftFinal1
    :: (forall g. c g => g a -> g b)
    -> Final c f a
    -> Final c f b
liftFinal1 :: forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 forall (g :: k -> *). c g => g a -> g b
f Final c f a
x = (forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g b)
-> Final c f b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k -> *).
  c g =>
  (forall (x :: k). f x -> g x) -> g b)
 -> Final c f b)
-> (forall (g :: k -> *).
    c g =>
    (forall (x :: k). f x -> g x) -> g b)
-> Final c f b
forall a b. (a -> b) -> a -> b
$ \forall (x :: k). f x -> g x
r -> g a -> g b
forall (g :: k -> *). c g => g a -> g b
f (Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c f a
x f x -> g x
forall (x :: k). f x -> g x
r)
liftFinal2
    :: (forall g. c g => g a -> g b -> g d)
    -> Final c f a
    -> Final c f b
    -> Final c f d
liftFinal2 :: forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 forall (g :: k -> *). c g => g a -> g b -> g d
f Final c f a
x Final c f b
y = (forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g d)
-> Final c f d
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k -> *).
  c g =>
  (forall (x :: k). f x -> g x) -> g d)
 -> Final c f d)
-> (forall (g :: k -> *).
    c g =>
    (forall (x :: k). f x -> g x) -> g d)
-> Final c f d
forall a b. (a -> b) -> a -> b
$ \forall (x :: k). f x -> g x
r -> g a -> g b -> g d
forall (g :: k -> *). c g => g a -> g b -> g d
f (Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c f a
x f x -> g x
forall (x :: k). f x -> g x
r) (Final c f b
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c f b
y f x -> g x
forall (x :: k). f x -> g x
r)
instance Functor (Final Functor f) where
    fmap :: forall a b. (a -> b) -> Final Functor f a -> Final Functor f b
fmap a -> b
f = (forall (g :: * -> *). Functor g => g a -> g b)
-> Final Functor f a -> Final Functor f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Functor (Final Apply f) where
    fmap :: forall a b. (a -> b) -> Final Apply f a -> Final Apply f b
fmap a -> b
f = (forall (g :: * -> *). Apply g => g a -> g b)
-> Final Apply f a -> Final Apply f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Apply (Final Apply f) where
    <.> :: forall a b.
Final Apply f (a -> b) -> Final Apply f a -> Final Apply f b
(<.>) = (forall (g :: * -> *). Apply g => g (a -> b) -> g a -> g b)
-> Final Apply f (a -> b) -> Final Apply f a -> Final Apply f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (g :: * -> *). Apply g => g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Apply f => f (a -> b) -> f a -> f b
(<.>)
    liftF2 :: forall a b c.
(a -> b -> c)
-> Final Apply f a -> Final Apply f b -> Final Apply f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). Apply g => g a -> g b -> g c)
-> Final Apply f a -> Final Apply f b -> Final Apply f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Apply f =>
(a -> b -> c) -> f a -> f b -> f c
liftF2 a -> b -> c
f)
instance Functor (Final Bind f) where
    fmap :: forall a b. (a -> b) -> Final Bind f a -> Final Bind f b
fmap a -> b
f = (forall (g :: * -> *). Bind g => g a -> g b)
-> Final Bind f a -> Final Bind f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Apply (Final Bind f) where
    <.> :: forall a b.
Final Bind f (a -> b) -> Final Bind f a -> Final Bind f b
(<.>) = (forall (g :: * -> *). Bind g => g (a -> b) -> g a -> g b)
-> Final Bind f (a -> b) -> Final Bind f a -> Final Bind f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Apply f => f (a -> b) -> f a -> f b
forall (g :: * -> *). Bind g => g (a -> b) -> g a -> g b
(<.>)
    liftF2 :: forall a b c.
(a -> b -> c) -> Final Bind f a -> Final Bind f b -> Final Bind f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). Bind g => g a -> g b -> g c)
-> Final Bind f a -> Final Bind f b -> Final Bind f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Apply f =>
(a -> b -> c) -> f a -> f b -> f c
liftF2 a -> b -> c
f)
instance Bind (Final Bind f) where
    Final Bind f a
x >>- :: forall a b.
Final Bind f a -> (a -> Final Bind f b) -> Final Bind f b
>>- a -> Final Bind f b
f = (forall (g :: * -> *). Bind g => (forall x. f x -> g x) -> g b)
-> Final Bind f b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: * -> *). Bind g => (forall x. f x -> g x) -> g b)
 -> Final Bind f b)
-> (forall (g :: * -> *). Bind g => (forall x. f x -> g x) -> g b)
-> Final Bind f b
forall a b. (a -> b) -> a -> b
$ \forall x. f x -> g x
r -> Final Bind f a
-> forall (g :: * -> *). Bind g => (forall x. f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final Bind f a
x f x -> g x
forall x. f x -> g x
r g a -> (a -> g b) -> g b
forall a b. g a -> (a -> g b) -> g b
forall (m :: * -> *) a b. Bind m => m a -> (a -> m b) -> m b
>>- \a
y -> Final Bind f b
-> forall (g :: * -> *). Bind g => (forall x. f x -> g x) -> g b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal (a -> Final Bind f b
f a
y) f x -> g x
forall x. f x -> g x
r
instance Functor (Final Applicative f) where
    fmap :: forall a b.
(a -> b) -> Final Applicative f a -> Final Applicative f b
fmap a -> b
f = (forall (g :: * -> *). Applicative g => g a -> g b)
-> Final Applicative f a -> Final Applicative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Apply (Final Applicative f) where
    <.> :: forall a b.
Final Applicative f (a -> b)
-> Final Applicative f a -> Final Applicative f b
(<.>) = (forall (g :: * -> *). Applicative g => g (a -> b) -> g a -> g b)
-> Final Applicative f (a -> b)
-> Final Applicative f a
-> Final Applicative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (g :: * -> *). Applicative g => g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)
    liftF2 :: forall a b c.
(a -> b -> c)
-> Final Applicative f a
-> Final Applicative f b
-> Final Applicative f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). Applicative g => g a -> g b -> g c)
-> Final Applicative f a
-> Final Applicative f b
-> Final Applicative f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Applicative (Final Applicative f) where
    pure :: forall a. a -> Final Applicative f a
pure a
x = (forall (g :: * -> *). Applicative g => g a)
-> Final Applicative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x)
    <*> :: forall a b.
Final Applicative f (a -> b)
-> Final Applicative f a -> Final Applicative f b
(<*>)  = (forall (g :: * -> *). Applicative g => g (a -> b) -> g a -> g b)
-> Final Applicative f (a -> b)
-> Final Applicative f a
-> Final Applicative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (g :: * -> *). Applicative g => g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)
    liftA2 :: forall a b c.
(a -> b -> c)
-> Final Applicative f a
-> Final Applicative f b
-> Final Applicative f c
liftA2 a -> b -> c
f = (forall (g :: * -> *). Applicative g => g a -> g b -> g c)
-> Final Applicative f a
-> Final Applicative f b
-> Final Applicative f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Functor (Final Alternative f) where
    fmap :: forall a b.
(a -> b) -> Final Alternative f a -> Final Alternative f b
fmap a -> b
f = (forall (g :: * -> *). Alternative g => g a -> g b)
-> Final Alternative f a -> Final Alternative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Apply (Final Alternative f) where
    <.> :: forall a b.
Final Alternative f (a -> b)
-> Final Alternative f a -> Final Alternative f b
(<.>) = (forall (g :: * -> *). Alternative g => g (a -> b) -> g a -> g b)
-> Final Alternative f (a -> b)
-> Final Alternative f a
-> Final Alternative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
forall (g :: * -> *). Alternative g => g (a -> b) -> g a -> g b
(<*>)
    liftF2 :: forall a b c.
(a -> b -> c)
-> Final Alternative f a
-> Final Alternative f b
-> Final Alternative f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). Alternative g => g a -> g b -> g c)
-> Final Alternative f a
-> Final Alternative f b
-> Final Alternative f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Applicative (Final Alternative f) where
    pure :: forall a. a -> Final Alternative f a
pure a
x = (forall (g :: * -> *). Alternative g => g a)
-> Final Alternative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x)
    <*> :: forall a b.
Final Alternative f (a -> b)
-> Final Alternative f a -> Final Alternative f b
(<*>)  = (forall (g :: * -> *). Alternative g => g (a -> b) -> g a -> g b)
-> Final Alternative f (a -> b)
-> Final Alternative f a
-> Final Alternative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
forall (g :: * -> *). Alternative g => g (a -> b) -> g a -> g b
(<*>)
    liftA2 :: forall a b c.
(a -> b -> c)
-> Final Alternative f a
-> Final Alternative f b
-> Final Alternative f c
liftA2 a -> b -> c
f = (forall (g :: * -> *). Alternative g => g a -> g b -> g c)
-> Final Alternative f a
-> Final Alternative f b
-> Final Alternative f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Alt (Final Alternative f) where
    <!> :: forall a.
Final Alternative f a
-> Final Alternative f a -> Final Alternative f a
(<!>) = (forall (g :: * -> *). Alternative g => g a -> g a -> g a)
-> Final Alternative f a
-> Final Alternative f a
-> Final Alternative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (g :: * -> *). Alternative g => g a -> g a -> g a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>)
instance Plus (Final Alternative f) where
    zero :: forall a. Final Alternative f a
zero = (forall (g :: * -> *). Alternative g => g a)
-> Final Alternative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). Alternative g => g a
forall (f :: * -> *) a. Alternative f => f a
empty
instance Alternative (Final Alternative f) where
    empty :: forall a. Final Alternative f a
empty = (forall (g :: * -> *). Alternative g => g a)
-> Final Alternative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). Alternative g => g a
forall (f :: * -> *) a. Alternative f => f a
empty
    <|> :: forall a.
Final Alternative f a
-> Final Alternative f a -> Final Alternative f a
(<|>) = (forall (g :: * -> *). Alternative g => g a -> g a -> g a)
-> Final Alternative f a
-> Final Alternative f a
-> Final Alternative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (g :: * -> *). Alternative g => g a -> g a -> g a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>)
instance Functor (Final Monad f) where
    fmap :: forall a b. (a -> b) -> Final Monad f a -> Final Monad f b
fmap a -> b
f = (forall (g :: * -> *). Monad g => g a -> g b)
-> Final Monad f a -> Final Monad f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Apply (Final Monad f) where
    <.> :: forall a b.
Final Monad f (a -> b) -> Final Monad f a -> Final Monad f b
(<.>) = (forall (g :: * -> *). Monad g => g (a -> b) -> g a -> g b)
-> Final Monad f (a -> b) -> Final Monad f a -> Final Monad f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (g :: * -> *). Monad g => g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)
    liftF2 :: forall a b c.
(a -> b -> c)
-> Final Monad f a -> Final Monad f b -> Final Monad f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). Monad g => g a -> g b -> g c)
-> Final Monad f a -> Final Monad f b -> Final Monad f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Applicative (Final Monad f) where
    pure :: forall a. a -> Final Monad f a
pure a
x = (forall (g :: * -> *). Monad g => g a) -> Final Monad f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x)
    <*> :: forall a b.
Final Monad f (a -> b) -> Final Monad f a -> Final Monad f b
(<*>)  = (forall (g :: * -> *). Monad g => g (a -> b) -> g a -> g b)
-> Final Monad f (a -> b) -> Final Monad f a -> Final Monad f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (g :: * -> *). Monad g => g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)
    liftA2 :: forall a b c.
(a -> b -> c)
-> Final Monad f a -> Final Monad f b -> Final Monad f c
liftA2 a -> b -> c
f = (forall (g :: * -> *). Monad g => g a -> g b -> g c)
-> Final Monad f a -> Final Monad f b -> Final Monad f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Monad (Final Monad f) where
    Final Monad f a
x >>= :: forall a b.
Final Monad f a -> (a -> Final Monad f b) -> Final Monad f b
>>= a -> Final Monad f b
f  = (forall (g :: * -> *). Monad g => (forall x. f x -> g x) -> g b)
-> Final Monad f b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: * -> *). Monad g => (forall x. f x -> g x) -> g b)
 -> Final Monad f b)
-> (forall (g :: * -> *). Monad g => (forall x. f x -> g x) -> g b)
-> Final Monad f b
forall a b. (a -> b) -> a -> b
$ \forall x. f x -> g x
r -> do
      a
y <- Final Monad f a
-> forall (g :: * -> *). Monad g => (forall x. f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final Monad f a
x f x -> g x
forall x. f x -> g x
r
      Final Monad f b
-> forall (g :: * -> *). Monad g => (forall x. f x -> g x) -> g b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal (a -> Final Monad f b
f a
y) f x -> g x
forall x. f x -> g x
r
instance Functor (Final MonadPlus f) where
    fmap :: forall a b. (a -> b) -> Final MonadPlus f a -> Final MonadPlus f b
fmap a -> b
f = (forall (g :: * -> *). MonadPlus g => g a -> g b)
-> Final MonadPlus f a -> Final MonadPlus f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Applicative (Final MonadPlus f) where
    pure :: forall a. a -> Final MonadPlus f a
pure a
x = (forall (g :: * -> *). MonadPlus g => g a) -> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x)
    <*> :: forall a b.
Final MonadPlus f (a -> b)
-> Final MonadPlus f a -> Final MonadPlus f b
(<*>)  = (forall (g :: * -> *). MonadPlus g => g (a -> b) -> g a -> g b)
-> Final MonadPlus f (a -> b)
-> Final MonadPlus f a
-> Final MonadPlus f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
forall (g :: * -> *). MonadPlus g => g (a -> b) -> g a -> g b
(<*>)
    liftA2 :: forall a b c.
(a -> b -> c)
-> Final MonadPlus f a
-> Final MonadPlus f b
-> Final MonadPlus f c
liftA2 a -> b -> c
f = (forall (g :: * -> *). MonadPlus g => g a -> g b -> g c)
-> Final MonadPlus f a
-> Final MonadPlus f b
-> Final MonadPlus f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Monad (Final MonadPlus f) where
    Final MonadPlus f a
x >>= :: forall a b.
Final MonadPlus f a
-> (a -> Final MonadPlus f b) -> Final MonadPlus f b
>>= a -> Final MonadPlus f b
f  = (forall (g :: * -> *).
 MonadPlus g =>
 (forall x. f x -> g x) -> g b)
-> Final MonadPlus f b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: * -> *).
  MonadPlus g =>
  (forall x. f x -> g x) -> g b)
 -> Final MonadPlus f b)
-> (forall (g :: * -> *).
    MonadPlus g =>
    (forall x. f x -> g x) -> g b)
-> Final MonadPlus f b
forall a b. (a -> b) -> a -> b
$ \forall x. f x -> g x
r -> do
      a
y <- Final MonadPlus f a
-> forall (g :: * -> *).
   MonadPlus g =>
   (forall x. f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final MonadPlus f a
x f x -> g x
forall x. f x -> g x
r
      Final MonadPlus f b
-> forall (g :: * -> *).
   MonadPlus g =>
   (forall x. f x -> g x) -> g b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal (a -> Final MonadPlus f b
f a
y) f x -> g x
forall x. f x -> g x
r
instance Alt (Final MonadPlus f) where
    <!> :: forall a.
Final MonadPlus f a -> Final MonadPlus f a -> Final MonadPlus f a
(<!>) = (forall (g :: * -> *). MonadPlus g => g a -> g a -> g a)
-> Final MonadPlus f a
-> Final MonadPlus f a
-> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
forall (g :: * -> *). MonadPlus g => g a -> g a -> g a
(<|>)
instance Plus (Final MonadPlus f) where
    zero :: forall a. Final MonadPlus f a
zero = (forall (g :: * -> *). MonadPlus g => g a) -> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (f :: * -> *) a. Alternative f => f a
forall (g :: * -> *). MonadPlus g => g a
empty
instance Alternative (Final MonadPlus f) where
    empty :: forall a. Final MonadPlus f a
empty = (forall (g :: * -> *). MonadPlus g => g a) -> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (f :: * -> *) a. Alternative f => f a
forall (g :: * -> *). MonadPlus g => g a
empty
    <|> :: forall a.
Final MonadPlus f a -> Final MonadPlus f a -> Final MonadPlus f a
(<|>) = (forall (g :: * -> *). MonadPlus g => g a -> g a -> g a)
-> Final MonadPlus f a
-> Final MonadPlus f a
-> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
forall (g :: * -> *). MonadPlus g => g a -> g a -> g a
(<|>)
instance MonadPlus (Final MonadPlus f) where
    mzero :: forall a. Final MonadPlus f a
mzero = (forall (g :: * -> *). MonadPlus g => g a) -> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). MonadPlus g => g a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
    mplus :: forall a.
Final MonadPlus f a -> Final MonadPlus f a -> Final MonadPlus f a
mplus = (forall (g :: * -> *). MonadPlus g => g a -> g a -> g a)
-> Final MonadPlus f a
-> Final MonadPlus f a
-> Final MonadPlus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (g :: * -> *). MonadPlus g => g a -> g a -> g a
forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
mplus
instance Pointed (Final Pointed f) where
    point :: forall a. a -> Final Pointed f a
point a
x = (forall (g :: * -> *). Pointed g => g a) -> Final Pointed f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (p :: * -> *) a. Pointed p => a -> p a
point a
x)
instance Functor (Final (MonadReader r) f) where
    fmap :: forall a b.
(a -> b) -> Final (MonadReader r) f a -> Final (MonadReader r) f b
fmap a -> b
f = (forall (g :: * -> *). MonadReader r g => g a -> g b)
-> Final (MonadReader r) f a -> Final (MonadReader r) f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Applicative (Final (MonadReader r) f) where
    pure :: forall a. a -> Final (MonadReader r) f a
pure a
x = (forall (g :: * -> *). MonadReader r g => g a)
-> Final (MonadReader r) f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x)
    <*> :: forall a b.
Final (MonadReader r) f (a -> b)
-> Final (MonadReader r) f a -> Final (MonadReader r) f b
(<*>)  = (forall (g :: * -> *). MonadReader r g => g (a -> b) -> g a -> g b)
-> Final (MonadReader r) f (a -> b)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
forall (g :: * -> *). MonadReader r g => g (a -> b) -> g a -> g b
(<*>)
    liftA2 :: forall a b c.
(a -> b -> c)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
-> Final (MonadReader r) f c
liftA2 a -> b -> c
f = (forall (g :: * -> *). MonadReader r g => g a -> g b -> g c)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
-> Final (MonadReader r) f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Apply (Final (MonadReader r) f) where
    <.> :: forall a b.
Final (MonadReader r) f (a -> b)
-> Final (MonadReader r) f a -> Final (MonadReader r) f b
(<.>) = (forall (g :: * -> *). MonadReader r g => g (a -> b) -> g a -> g b)
-> Final (MonadReader r) f (a -> b)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g (a -> b) -> g a -> g b
forall a b. g (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
forall (g :: * -> *). MonadReader r g => g (a -> b) -> g a -> g b
(<*>)
    liftF2 :: forall a b c.
(a -> b -> c)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
-> Final (MonadReader r) f c
liftF2 a -> b -> c
f = (forall (g :: * -> *). MonadReader r g => g a -> g b -> g c)
-> Final (MonadReader r) f a
-> Final (MonadReader r) f b
-> Final (MonadReader r) f c
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> b -> c) -> g a -> g b -> g c
forall a b c. (a -> b -> c) -> g a -> g b -> g c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f)
instance Monad (Final (MonadReader r) f) where
    Final (MonadReader r) f a
x >>= :: forall a b.
Final (MonadReader r) f a
-> (a -> Final (MonadReader r) f b) -> Final (MonadReader r) f b
>>= a -> Final (MonadReader r) f b
f  = (forall (g :: * -> *).
 MonadReader r g =>
 (forall x. f x -> g x) -> g b)
-> Final (MonadReader r) f b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: * -> *).
  MonadReader r g =>
  (forall x. f x -> g x) -> g b)
 -> Final (MonadReader r) f b)
-> (forall (g :: * -> *).
    MonadReader r g =>
    (forall x. f x -> g x) -> g b)
-> Final (MonadReader r) f b
forall a b. (a -> b) -> a -> b
$ \forall x. f x -> g x
r -> do
      a
y <- Final (MonadReader r) f a
-> forall (g :: * -> *).
   MonadReader r g =>
   (forall x. f x -> g x) -> g a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final (MonadReader r) f a
x f x -> g x
forall x. f x -> g x
r
      Final (MonadReader r) f b
-> forall (g :: * -> *).
   MonadReader r g =>
   (forall x. f x -> g x) -> g b
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal (a -> Final (MonadReader r) f b
f a
y) f x -> g x
forall x. f x -> g x
r
instance MonadReader r (Final (MonadReader r) f) where
    ask :: Final (MonadReader r) f r
ask     = (forall (g :: * -> *). MonadReader r g => g r)
-> Final (MonadReader r) f r
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g r
forall r (m :: * -> *). MonadReader r m => m r
forall (g :: * -> *). MonadReader r g => g r
ask
    local :: forall a.
(r -> r) -> Final (MonadReader r) f a -> Final (MonadReader r) f a
local r -> r
f = (forall (g :: * -> *). MonadReader r g => g a -> g a)
-> Final (MonadReader r) f a -> Final (MonadReader r) f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((r -> r) -> g a -> g a
forall a. (r -> r) -> g a -> g a
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
local r -> r
f)
instance Functor (Final Alt f) where
    fmap :: forall a b. (a -> b) -> Final Alt f a -> Final Alt f b
fmap a -> b
f = (forall (g :: * -> *). Alt g => g a -> g b)
-> Final Alt f a -> Final Alt f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Alt (Final Alt f) where
    <!> :: forall a. Final Alt f a -> Final Alt f a -> Final Alt f a
(<!>) = (forall (g :: * -> *). Alt g => g a -> g a -> g a)
-> Final Alt f a -> Final Alt f a -> Final Alt f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (g :: * -> *). Alt g => g a -> g a -> g a
forall (f :: * -> *) a. Alt f => f a -> f a -> f a
(<!>)
instance Functor (Final Plus f) where
    fmap :: forall a b. (a -> b) -> Final Plus f a -> Final Plus f b
fmap a -> b
f = (forall (g :: * -> *). Plus g => g a -> g b)
-> Final Plus f a -> Final Plus f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> g a -> g b
forall a b. (a -> b) -> g a -> g b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
instance Alt (Final Plus f) where
    <!> :: forall a. Final Plus f a -> Final Plus f a -> Final Plus f a
(<!>) = (forall (g :: * -> *). Plus g => g a -> g a -> g a)
-> Final Plus f a -> Final Plus f a -> Final Plus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g a -> g a
forall a. g a -> g a -> g a
forall (f :: * -> *) a. Alt f => f a -> f a -> f a
forall (g :: * -> *). Plus g => g a -> g a -> g a
(<!>)
instance Plus (Final Plus f) where
    zero :: forall a. Final Plus f a
zero = (forall (g :: * -> *). Plus g => g a) -> Final Plus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). Plus g => g a
forall (f :: * -> *) a. Plus f => f a
zero
instance Contravariant (Final Contravariant f) where
    contramap :: forall a' a.
(a' -> a) -> Final Contravariant f a -> Final Contravariant f a'
contramap a' -> a
f = (forall (g :: * -> *). Contravariant g => g a -> g a')
-> Final Contravariant f a -> Final Contravariant f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Contravariant (Final Divise f) where
    contramap :: forall a' a. (a' -> a) -> Final Divise f a -> Final Divise f a'
contramap a' -> a
f = (forall (g :: * -> *). Divise g => g a -> g a')
-> Final Divise f a -> Final Divise f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Divise (Final Divise f) where
    divise :: forall a b c.
(a -> (b, c))
-> Final Divise f b -> Final Divise f c -> Final Divise f a
divise a -> (b, c)
f = (forall (g :: * -> *). Divise g => g b -> g c -> g a)
-> Final Divise f b -> Final Divise f c -> Final Divise f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> (b, c)) -> g b -> g c -> g a
forall a b c. (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Divise f =>
(a -> (b, c)) -> f b -> f c -> f a
divise a -> (b, c)
f)
instance Contravariant (Final Divisible f) where
    contramap :: forall a' a.
(a' -> a) -> Final Divisible f a -> Final Divisible f a'
contramap a' -> a
f = (forall (g :: * -> *). Divisible g => g a -> g a')
-> Final Divisible f a -> Final Divisible f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Divise (Final Divisible f) where
    divise :: forall a b c.
(a -> (b, c))
-> Final Divisible f b
-> Final Divisible f c
-> Final Divisible f a
divise a -> (b, c)
f = (forall (g :: * -> *). Divisible g => g b -> g c -> g a)
-> Final Divisible f b
-> Final Divisible f c
-> Final Divisible f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> (b, c)) -> g b -> g c -> g a
forall a b c. (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Divisible f =>
(a -> (b, c)) -> f b -> f c -> f a
divide a -> (b, c)
f)
instance Divisible (Final Divisible f) where
    divide :: forall a b c.
(a -> (b, c))
-> Final Divisible f b
-> Final Divisible f c
-> Final Divisible f a
divide a -> (b, c)
f = (forall (g :: * -> *). Divisible g => g b -> g c -> g a)
-> Final Divisible f b
-> Final Divisible f c
-> Final Divisible f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> (b, c)) -> g b -> g c -> g a
forall a b c. (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Divisible f =>
(a -> (b, c)) -> f b -> f c -> f a
divide a -> (b, c)
f)
    conquer :: forall a. Final Divisible f a
conquer = (forall (g :: * -> *). Divisible g => g a) -> Final Divisible f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). Divisible g => g a
forall (f :: * -> *) a. Divisible f => f a
conquer
instance Contravariant (Final Decide f) where
    contramap :: forall a' a. (a' -> a) -> Final Decide f a -> Final Decide f a'
contramap a' -> a
f = (forall (g :: * -> *). Decide g => g a -> g a')
-> Final Decide f a -> Final Decide f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Decide (Final Decide f) where
    decide :: forall a b c.
(a -> Either b c)
-> Final Decide f b -> Final Decide f c -> Final Decide f a
decide a -> Either b c
f = (forall (g :: * -> *). Decide g => g b -> g c -> g a)
-> Final Decide f b -> Final Decide f c -> Final Decide f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> Either b c) -> g b -> g c -> g a
forall a b c. (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Decide f =>
(a -> Either b c) -> f b -> f c -> f a
decide a -> Either b c
f)
instance Contravariant (Final Conclude f) where
    contramap :: forall a' a. (a' -> a) -> Final Conclude f a -> Final Conclude f a'
contramap a' -> a
f = (forall (g :: * -> *). Conclude g => g a -> g a')
-> Final Conclude f a -> Final Conclude f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Decide (Final Conclude f) where
    decide :: forall a b c.
(a -> Either b c)
-> Final Conclude f b -> Final Conclude f c -> Final Conclude f a
decide a -> Either b c
f = (forall (g :: * -> *). Conclude g => g b -> g c -> g a)
-> Final Conclude f b -> Final Conclude f c -> Final Conclude f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> Either b c) -> g b -> g c -> g a
forall a b c. (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Decide f =>
(a -> Either b c) -> f b -> f c -> f a
decide a -> Either b c
f)
instance Conclude (Final Conclude f) where
    conclude :: forall a. (a -> Void) -> Final Conclude f a
conclude a -> Void
f = (forall (g :: * -> *). Conclude g => g a) -> Final Conclude f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 ((a -> Void) -> g a
forall a. (a -> Void) -> g a
forall (f :: * -> *) a. Conclude f => (a -> Void) -> f a
conclude a -> Void
f)
instance Contravariant (Final Decidable f) where
    contramap :: forall a' a.
(a' -> a) -> Final Decidable f a -> Final Decidable f a'
contramap a' -> a
f = (forall (g :: * -> *). Decidable g => g a -> g a')
-> Final Decidable f a -> Final Decidable f a'
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a' -> a) -> g a -> g a'
forall a' a. (a' -> a) -> g a -> g a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f)
instance Divisible (Final Decidable f) where
    divide :: forall a b c.
(a -> (b, c))
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
divide a -> (b, c)
f = (forall (g :: * -> *). Decidable g => g b -> g c -> g a)
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> (b, c)) -> g b -> g c -> g a
forall a b c. (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Divisible f =>
(a -> (b, c)) -> f b -> f c -> f a
divide a -> (b, c)
f)
    conquer :: forall a. Final Decidable f a
conquer = (forall (g :: * -> *). Decidable g => g a) -> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 g a
forall a. g a
forall (g :: * -> *). Decidable g => g a
forall (f :: * -> *) a. Divisible f => f a
conquer
instance Decide (Final Decidable f) where
    decide :: forall a b c.
(a -> Either b c)
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
decide a -> Either b c
f = (forall (g :: * -> *). Decidable g => g b -> g c -> g a)
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> Either b c) -> g b -> g c -> g a
forall a b c. (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Decidable f =>
(a -> Either b c) -> f b -> f c -> f a
choose a -> Either b c
f)
instance Conclude (Final Decidable f) where
    conclude :: forall a. (a -> Void) -> Final Decidable f a
conclude a -> Void
f = (forall (g :: * -> *). Decidable g => g a) -> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 ((a -> Void) -> g a
forall a. (a -> Void) -> g a
forall (f :: * -> *) a. Decidable f => (a -> Void) -> f a
lose a -> Void
f)
instance Decidable (Final Decidable f) where
    choose :: forall a b c.
(a -> Either b c)
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
choose a -> Either b c
f = (forall (g :: * -> *). Decidable g => g b -> g c -> g a)
-> Final Decidable f b
-> Final Decidable f c
-> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((a -> Either b c) -> g b -> g c -> g a
forall a b c. (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) a b c.
Decidable f =>
(a -> Either b c) -> f b -> f c -> f a
choose a -> Either b c
f)
    lose :: forall a. (a -> Void) -> Final Decidable f a
lose a -> Void
f = (forall (g :: * -> *). Decidable g => g a) -> Final Decidable f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 ((a -> Void) -> g a
forall a. (a -> Void) -> g a
forall (f :: * -> *) a. Decidable f => (a -> Void) -> f a
lose a -> Void
f)
instance Invariant (Final Invariant f) where
    invmap :: forall a b.
(a -> b) -> (b -> a) -> Final Invariant f a -> Final Invariant f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Invariant g => g a -> g b)
-> Final Invariant f a -> Final Invariant f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Invariant (Final Inply f) where
    invmap :: forall a b.
(a -> b) -> (b -> a) -> Final Inply f a -> Final Inply f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Inply g => g a -> g b)
-> Final Inply f a -> Final Inply f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Inply (Final Inply f) where
    gather :: forall b c a.
(b -> c -> a)
-> (a -> (b, c))
-> Final Inply f b
-> Final Inply f c
-> Final Inply f a
gather b -> c -> a
f a -> (b, c)
g = (forall (g :: * -> *). Inply g => g b -> g c -> g a)
-> Final Inply f b -> Final Inply f c -> Final Inply f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall b c a. (b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) b c a.
Inply f =>
(b -> c -> a) -> (a -> (b, c)) -> f b -> f c -> f a
gather b -> c -> a
f a -> (b, c)
g)
    gathered :: forall a b.
Final Inply f a -> Final Inply f b -> Final Inply f (a, b)
gathered = (forall (g :: * -> *). Inply g => g a -> g b -> g (a, b))
-> Final Inply f a -> Final Inply f b -> Final Inply f (a, b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (a, b)
forall a b. g a -> g b -> g (a, b)
forall (g :: * -> *). Inply g => g a -> g b -> g (a, b)
forall (f :: * -> *) a b. Inply f => f a -> f b -> f (a, b)
gathered
instance Invariant (Final Inplicative f) where
    invmap :: forall a b.
(a -> b)
-> (b -> a) -> Final Inplicative f a -> Final Inplicative f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Inplicative g => g a -> g b)
-> Final Inplicative f a -> Final Inplicative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Inply (Final Inplicative f) where
    gather :: forall b c a.
(b -> c -> a)
-> (a -> (b, c))
-> Final Inplicative f b
-> Final Inplicative f c
-> Final Inplicative f a
gather b -> c -> a
f a -> (b, c)
g = (forall (g :: * -> *). Inplicative g => g b -> g c -> g a)
-> Final Inplicative f b
-> Final Inplicative f c
-> Final Inplicative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall b c a. (b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) b c a.
Inply f =>
(b -> c -> a) -> (a -> (b, c)) -> f b -> f c -> f a
gather b -> c -> a
f a -> (b, c)
g)
    gathered :: forall a b.
Final Inplicative f a
-> Final Inplicative f b -> Final Inplicative f (a, b)
gathered = (forall (g :: * -> *). Inplicative g => g a -> g b -> g (a, b))
-> Final Inplicative f a
-> Final Inplicative f b
-> Final Inplicative f (a, b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (a, b)
forall a b. g a -> g b -> g (a, b)
forall (g :: * -> *). Inplicative g => g a -> g b -> g (a, b)
forall (f :: * -> *) a b. Inply f => f a -> f b -> f (a, b)
gathered
instance Inplicative (Final Inplicative f) where
    knot :: forall a. a -> Final Inplicative f a
knot a
x = (forall (g :: * -> *). Inplicative g => g a)
-> Final Inplicative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Inplicative f => a -> f a
knot a
x)
instance Invariant (Final Inalt f) where
    invmap :: forall a b.
(a -> b) -> (b -> a) -> Final Inalt f a -> Final Inalt f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Inalt g => g a -> g b)
-> Final Inalt f a -> Final Inalt f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Inalt (Final Inalt f) where
    swerve :: forall b a c.
(b -> a)
-> (c -> a)
-> (a -> Either b c)
-> Final Inalt f b
-> Final Inalt f c
-> Final Inalt f a
swerve b -> a
f c -> a
g a -> Either b c
h = (forall (g :: * -> *). Inalt g => g b -> g c -> g a)
-> Final Inalt f b -> Final Inalt f c -> Final Inalt f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall b a c.
(b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) b a c.
Inalt f =>
(b -> a) -> (c -> a) -> (a -> Either b c) -> f b -> f c -> f a
swerve b -> a
f c -> a
g a -> Either b c
h)
    swerved :: forall a b.
Final Inalt f a -> Final Inalt f b -> Final Inalt f (Either a b)
swerved = (forall (g :: * -> *). Inalt g => g a -> g b -> g (Either a b))
-> Final Inalt f a -> Final Inalt f b -> Final Inalt f (Either a b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (Either a b)
forall a b. g a -> g b -> g (Either a b)
forall (g :: * -> *). Inalt g => g a -> g b -> g (Either a b)
forall (f :: * -> *) a b. Inalt f => f a -> f b -> f (Either a b)
swerved
instance Invariant (Final Inplus f) where
    invmap :: forall a b.
(a -> b) -> (b -> a) -> Final Inplus f a -> Final Inplus f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Inplus g => g a -> g b)
-> Final Inplus f a -> Final Inplus f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Inalt (Final Inplus f) where
    swerve :: forall b a c.
(b -> a)
-> (c -> a)
-> (a -> Either b c)
-> Final Inplus f b
-> Final Inplus f c
-> Final Inplus f a
swerve b -> a
f c -> a
g a -> Either b c
h = (forall (g :: * -> *). Inplus g => g b -> g c -> g a)
-> Final Inplus f b -> Final Inplus f c -> Final Inplus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall b a c.
(b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) b a c.
Inalt f =>
(b -> a) -> (c -> a) -> (a -> Either b c) -> f b -> f c -> f a
swerve b -> a
f c -> a
g a -> Either b c
h)
    swerved :: forall a b.
Final Inplus f a -> Final Inplus f b -> Final Inplus f (Either a b)
swerved = (forall (g :: * -> *). Inplus g => g a -> g b -> g (Either a b))
-> Final Inplus f a
-> Final Inplus f b
-> Final Inplus f (Either a b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (Either a b)
forall a b. g a -> g b -> g (Either a b)
forall (g :: * -> *). Inplus g => g a -> g b -> g (Either a b)
forall (f :: * -> *) a b. Inalt f => f a -> f b -> f (Either a b)
swerved
instance Inplus (Final Inplus f) where
    reject :: forall a. (a -> Void) -> Final Inplus f a
reject a -> Void
f = (forall (g :: * -> *). Inplus g => g a) -> Final Inplus f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 ((a -> Void) -> g a
forall a. (a -> Void) -> g a
forall (f :: * -> *) a. Inplus f => (a -> Void) -> f a
reject a -> Void
f)
instance Invariant (Final Internative f) where
    invmap :: forall a b.
(a -> b)
-> (b -> a) -> Final Internative f a -> Final Internative f b
invmap a -> b
f b -> a
g = (forall (g :: * -> *). Internative g => g a -> g b)
-> Final Internative f a -> Final Internative f b
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b)
-> Final c f a -> Final c f b
liftFinal1 ((a -> b) -> (b -> a) -> g a -> g b
forall a b. (a -> b) -> (b -> a) -> g a -> g b
forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g)
instance Inply (Final Internative f) where
    gather :: forall b c a.
(b -> c -> a)
-> (a -> (b, c))
-> Final Internative f b
-> Final Internative f c
-> Final Internative f a
gather b -> c -> a
f a -> (b, c)
g = (forall (g :: * -> *). Internative g => g b -> g c -> g a)
-> Final Internative f b
-> Final Internative f c
-> Final Internative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall b c a. (b -> c -> a) -> (a -> (b, c)) -> g b -> g c -> g a
forall (f :: * -> *) b c a.
Inply f =>
(b -> c -> a) -> (a -> (b, c)) -> f b -> f c -> f a
gather b -> c -> a
f a -> (b, c)
g)
    gathered :: forall a b.
Final Internative f a
-> Final Internative f b -> Final Internative f (a, b)
gathered = (forall (g :: * -> *). Internative g => g a -> g b -> g (a, b))
-> Final Internative f a
-> Final Internative f b
-> Final Internative f (a, b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (a, b)
forall a b. g a -> g b -> g (a, b)
forall (f :: * -> *) a b. Inply f => f a -> f b -> f (a, b)
forall (g :: * -> *). Internative g => g a -> g b -> g (a, b)
gathered
instance Inplicative (Final Internative f) where
    knot :: forall a. a -> Final Internative f a
knot a
x = (forall (g :: * -> *). Internative g => g a)
-> Final Internative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 (a -> g a
forall a. a -> g a
forall (f :: * -> *) a. Inplicative f => a -> f a
knot a
x)
instance Inalt (Final Internative f) where
    swerve :: forall b a c.
(b -> a)
-> (c -> a)
-> (a -> Either b c)
-> Final Internative f b
-> Final Internative f c
-> Final Internative f a
swerve b -> a
f c -> a
g a -> Either b c
h = (forall (g :: * -> *). Internative g => g b -> g c -> g a)
-> Final Internative f b
-> Final Internative f c
-> Final Internative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 ((b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall b a c.
(b -> a) -> (c -> a) -> (a -> Either b c) -> g b -> g c -> g a
forall (f :: * -> *) b a c.
Inalt f =>
(b -> a) -> (c -> a) -> (a -> Either b c) -> f b -> f c -> f a
swerve b -> a
f c -> a
g a -> Either b c
h)
    swerved :: forall a b.
Final Internative f a
-> Final Internative f b -> Final Internative f (Either a b)
swerved = (forall (g :: * -> *).
 Internative g =>
 g a -> g b -> g (Either a b))
-> Final Internative f a
-> Final Internative f b
-> Final Internative f (Either a b)
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (b :: k) (d :: k)
       (f :: k -> *).
(forall (g :: k -> *). c g => g a -> g b -> g d)
-> Final c f a -> Final c f b -> Final c f d
liftFinal2 g a -> g b -> g (Either a b)
forall a b. g a -> g b -> g (Either a b)
forall (g :: * -> *). Internative g => g a -> g b -> g (Either a b)
forall (f :: * -> *) a b. Inalt f => f a -> f b -> f (Either a b)
swerved
instance Inplus (Final Internative f) where
    reject :: forall a. (a -> Void) -> Final Internative f a
reject a -> Void
f = (forall (g :: * -> *). Internative g => g a)
-> Final Internative f a
forall {k} (c :: (k -> *) -> Constraint) (a :: k) (f :: k -> *).
(forall (g :: k -> *). c g => g a) -> Final c f a
liftFinal0 ((a -> Void) -> g a
forall a. (a -> Void) -> g a
forall (f :: * -> *) a. Inplus f => (a -> Void) -> f a
reject a -> Void
f)
hoistFinalC
    :: (forall g x. (c g => g x) -> (d g => g x))
    -> Final c f a
    -> Final d f a
hoistFinalC :: forall {k} (c :: (k -> *) -> Constraint)
       (d :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *) (x :: k). (c g => g x) -> d g => g x)
-> Final c f a -> Final d f a
hoistFinalC forall (g :: k -> *) (x :: k). (c g => g x) -> d g => g x
f (Final forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a
x) = (forall (g :: k -> *). d g => (forall (x :: k). f x -> g x) -> g a)
-> Final d f a
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k -> *).
  d g =>
  (forall (x :: k). f x -> g x) -> g a)
 -> Final d f a)
-> (forall (g :: k -> *).
    d g =>
    (forall (x :: k). f x -> g x) -> g a)
-> Final d f a
forall a b. (a -> b) -> a -> b
$ \forall (x :: k). f x -> g x
r -> (c g => g a) -> d g => g a
forall (g :: k -> *) (x :: k). (c g => g x) -> d g => g x
f ((forall (x :: k). f x -> g x) -> g a
forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a
x (\f x
y -> (c g => g x) -> d g => g x
forall (g :: k -> *) (x :: k). (c g => g x) -> d g => g x
f (f x -> g x
forall (x :: k). f x -> g x
r f x
y)))
instance HFunctor (Final c) where
    hmap :: forall (f :: k1 -> *) (g :: k1 -> *).
(f ~> g) -> Final c f ~> Final c g
hmap f ~> g
f Final c f x
x = (forall (g :: k1 -> *).
 c g =>
 (forall (x :: k1). g x -> g x) -> g x)
-> Final c g x
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k1 -> *).
  c g =>
  (forall (x :: k1). g x -> g x) -> g x)
 -> Final c g x)
-> (forall (g :: k1 -> *).
    c g =>
    (forall (x :: k1). g x -> g x) -> g x)
-> Final c g x
forall a b. (a -> b) -> a -> b
$ \forall (x :: k1). g x -> g x
r -> Final c f x
-> forall (g :: k1 -> *).
   c g =>
   (forall (x :: k1). f x -> g x) -> g x
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c f x
x (g x -> g x
forall (x :: k1). g x -> g x
r (g x -> g x) -> (f x -> g x) -> f x -> g x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> g x
f ~> g
f)
instance Inject (Final c) where
    inject :: forall (f :: k -> *). f ~> Final c f
inject f x
x = (forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g x)
-> Final c f x
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
(forall (g :: k -> *). c g => (forall (x :: k). f x -> g x) -> g a)
-> Final c f a
Final ((forall (g :: k -> *).
  c g =>
  (forall (x :: k). f x -> g x) -> g x)
 -> Final c f x)
-> (forall (g :: k -> *).
    c g =>
    (forall (x :: k). f x -> g x) -> g x)
-> Final c f x
forall a b. (a -> b) -> a -> b
$ \forall (x :: k). f x -> g x
f -> f x -> g x
forall (x :: k). f x -> g x
f f x
x
instance c f => Interpret (Final c) f where
    retract :: Final c f ~> f
retract Final c f x
x = Final c f x
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g x
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c f x
x f x -> f x
forall (x :: k). f x -> f x
forall a. a -> a
id
    interpret :: forall (g :: k -> *). (g ~> f) -> Final c g ~> f
interpret g ~> f
f Final c g x
x = Final c g x
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). g x -> g x) -> g x
forall {k} (c :: (k -> *) -> Constraint) (f :: k -> *) (a :: k).
Final c f a
-> forall (g :: k -> *).
   c g =>
   (forall (x :: k). f x -> g x) -> g a
runFinal Final c g x
x g x -> f x
g ~> f
f
toFinal :: Interpret t (Final c f) => t f ~> Final c f
toFinal :: forall {k} (t :: (k -> *) -> k -> *) (c :: (k -> *) -> Constraint)
       (f :: k -> *).
Interpret t (Final c f) =>
t f ~> Final c f
toFinal = (f ~> Final c f) -> t f ~> Final c f
forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
Interpret t f =>
(g ~> f) -> t g ~> f
forall (g :: k -> *). (g ~> Final c f) -> t g ~> Final c f
interpret f x -> Final c f x
f ~> Final c f
forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
forall (f :: k -> *). f ~> Final c f
inject
fromFinal :: (Inject t, c (t f)) => Final c f ~> t f
fromFinal :: forall {k} (t :: (k -> *) -> k -> *) (c :: (k -> *) -> Constraint)
       (f :: k -> *).
(Inject t, c (t f)) =>
Final c f ~> t f
fromFinal = (f ~> t f) -> Final c f ~> t f
forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
Interpret t f =>
(g ~> f) -> t g ~> f
forall (g :: k -> *). (g ~> t f) -> Final c g ~> t f
interpret f x -> t f x
f ~> t f
forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
forall (f :: k -> *). f ~> t f
inject
class FreeOf c t | t -> c where
    
    
    
    
    type FreeFunctorBy t :: (Type -> Type) -> Constraint
    type FreeFunctorBy t = Unconstrained
    fromFree :: t f ~> Final c f
    toFree   :: FreeFunctorBy t f => Final c f ~> t f
    default fromFree :: Interpret t (Final c f) => t f ~> Final c f
    fromFree = t f x -> Final c f x
t f ~> Final c f
forall {k} (t :: (k -> *) -> k -> *) (c :: (k -> *) -> Constraint)
       (f :: k -> *).
Interpret t (Final c f) =>
t f ~> Final c f
toFinal
    default toFree :: (Inject t, c (t f)) => Final c f ~> t f
    toFree = Final c f x -> t f x
Final c f ~> t f
forall {k} (t :: (k -> *) -> k -> *) (c :: (k -> *) -> Constraint)
       (f :: k -> *).
(Inject t, c (t f)) =>
Final c f ~> t f
fromFinal
finalizing :: (FreeOf c t, FreeFunctorBy t f) => t f <~> Final c f
finalizing :: forall (c :: (* -> *) -> Constraint) (t :: (* -> *) -> * -> *)
       (f :: * -> *).
(FreeOf c t, FreeFunctorBy t f) =>
t f <~> Final c f
finalizing = (t f ~> Final c f) -> (Final c f ~> t f) -> t f <~> Final c f
forall {k} (f :: k -> *) (g :: k -> *).
(f ~> g) -> (g ~> f) -> f <~> g
isoF t f x -> Final c f x
t f ~> Final c f
forall (f :: * -> *). t f ~> Final c f
forall (c :: (* -> *) -> Constraint) (t :: (* -> *) -> * -> *)
       (f :: * -> *).
FreeOf c t =>
t f ~> Final c f
fromFree Final c f x -> t f x
Final c f ~> t f
forall (f :: * -> *). FreeFunctorBy t f => Final c f ~> t f
forall (c :: (* -> *) -> Constraint) (t :: (* -> *) -> * -> *)
       (f :: * -> *).
(FreeOf c t, FreeFunctorBy t f) =>
Final c f ~> t f
toFree
instance FreeOf Functor       Coyoneda
instance FreeOf Contravariant CCY.Coyoneda
instance FreeOf Applicative   Ap
instance FreeOf Apply         Ap1
instance FreeOf Applicative   FAF.Ap
instance FreeOf Alternative   Alt.Alt
instance FreeOf Monad         Free
instance FreeOf Bind          Free1
instance FreeOf Pointed       Lift
instance FreeOf Pointed       MaybeApply
instance FreeOf Alt           NonEmptyF  where type FreeFunctorBy NonEmptyF = Functor
instance FreeOf Plus          ListF      where type FreeFunctorBy ListF = Functor
instance FreeOf Divise        Div1
instance FreeOf Divisible     Div
instance FreeOf Decide        Dec1
instance FreeOf Conclude      Dec
instance FreeOf Inply         DivAp1    where type FreeFunctorBy DivAp1 = Invariant
instance FreeOf Inplicative   DivAp
instance FreeOf Inalt         DecAlt1   where type FreeFunctorBy DecAlt1 = Invariant
instance FreeOf Inplus        DecAlt
instance FreeOf Unconstrained IdentityT