module Data.HFunctor (
HFunctor(..)
, overHFunctor
, Inject(..)
, HBind(..)
, ProxyF(..)
, ConstF(..)
, HLift(..), retractHLift
, HFree(..), foldHFree, retractHFree
, injectMap
, injectContramap
) where
import Control.Applicative.Backwards
import Control.Applicative.Free
import Control.Applicative.Lift
import Control.Applicative.ListF
import Control.Applicative.Step
import Control.Comonad.Trans.Env
import Control.Monad.Freer.Church
import Control.Monad.Reader
import Control.Monad.Trans.Compose
import Control.Monad.Trans.Identity
import Control.Natural
import Control.Natural.IsoF
import Data.Coerce
import Data.Data
import Data.Deriving
import Data.Functor.Bind
import Data.Functor.Classes
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.Coyoneda
import Data.Functor.Invariant
import Data.Functor.Plus
import Data.Functor.Product
import Data.Functor.Reverse
import Data.Functor.Sum
import Data.Functor.These
import Data.HFunctor.Internal
import Data.Kind
import Data.List.NonEmpty (NonEmpty(..))
import Data.Pointed
import Data.Semigroup.Foldable
import GHC.Generics
import qualified Control.Alternative.Free as Alt
import qualified Control.Applicative.Free.Fast as FAF
import qualified Control.Applicative.Free.Final as FA
import qualified Data.Functor.Contravariant.Coyoneda as CCY
import qualified Data.Map as M
import qualified Data.Map.NonEmpty as NEM
overHFunctor
:: HFunctor t
=> f <~> g
-> t f <~> t g
overHFunctor :: forall {k} {k} (t :: (k -> *) -> k -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f <~> g) -> t f <~> t g
overHFunctor f <~> g
f = forall {k} (f :: k -> *) (g :: k -> *).
(f ~> g) -> (g ~> f) -> f <~> g
isoF (forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap (forall {k} (f :: k -> *) (g :: k -> *). (f <~> g) -> f ~> g
viewF f <~> g
f)) (forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap (forall {k} (f :: k -> *) (g :: k -> *). (f <~> g) -> g ~> f
reviewF f <~> g
f))
data ProxyF f a = ProxyF
deriving (Int -> ProxyF f a -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k (f :: k) k (a :: k). Int -> ProxyF f a -> ShowS
forall k (f :: k) k (a :: k). [ProxyF f a] -> ShowS
forall k (f :: k) k (a :: k). ProxyF f a -> String
showList :: [ProxyF f a] -> ShowS
$cshowList :: forall k (f :: k) k (a :: k). [ProxyF f a] -> ShowS
show :: ProxyF f a -> String
$cshow :: forall k (f :: k) k (a :: k). ProxyF f a -> String
showsPrec :: Int -> ProxyF f a -> ShowS
$cshowsPrec :: forall k (f :: k) k (a :: k). Int -> ProxyF f a -> ShowS
Show, ReadPrec [ProxyF f a]
ReadPrec (ProxyF f a)
ReadS [ProxyF f a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall k (f :: k) k (a :: k). ReadPrec [ProxyF f a]
forall k (f :: k) k (a :: k). ReadPrec (ProxyF f a)
forall k (f :: k) k (a :: k). Int -> ReadS (ProxyF f a)
forall k (f :: k) k (a :: k). ReadS [ProxyF f a]
readListPrec :: ReadPrec [ProxyF f a]
$creadListPrec :: forall k (f :: k) k (a :: k). ReadPrec [ProxyF f a]
readPrec :: ReadPrec (ProxyF f a)
$creadPrec :: forall k (f :: k) k (a :: k). ReadPrec (ProxyF f a)
readList :: ReadS [ProxyF f a]
$creadList :: forall k (f :: k) k (a :: k). ReadS [ProxyF f a]
readsPrec :: Int -> ReadS (ProxyF f a)
$creadsPrec :: forall k (f :: k) k (a :: k). Int -> ReadS (ProxyF f a)
Read, ProxyF f a -> ProxyF f a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
/= :: ProxyF f a -> ProxyF f a -> Bool
$c/= :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
== :: ProxyF f a -> ProxyF f a -> Bool
$c== :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
Eq, ProxyF f a -> ProxyF f a -> Bool
ProxyF f a -> ProxyF f a -> Ordering
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall k (f :: k) k (a :: k). Eq (ProxyF f a)
forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Ordering
forall k (f :: k) k (a :: k).
ProxyF f a -> ProxyF f a -> ProxyF f a
min :: ProxyF f a -> ProxyF f a -> ProxyF f a
$cmin :: forall k (f :: k) k (a :: k).
ProxyF f a -> ProxyF f a -> ProxyF f a
max :: ProxyF f a -> ProxyF f a -> ProxyF f a
$cmax :: forall k (f :: k) k (a :: k).
ProxyF f a -> ProxyF f a -> ProxyF f a
>= :: ProxyF f a -> ProxyF f a -> Bool
$c>= :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
> :: ProxyF f a -> ProxyF f a -> Bool
$c> :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
<= :: ProxyF f a -> ProxyF f a -> Bool
$c<= :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
< :: ProxyF f a -> ProxyF f a -> Bool
$c< :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Bool
compare :: ProxyF f a -> ProxyF f a -> Ordering
$ccompare :: forall k (f :: k) k (a :: k). ProxyF f a -> ProxyF f a -> Ordering
Ord, forall k (f :: k) a b. a -> ProxyF f b -> ProxyF f a
forall k (f :: k) a b. (a -> b) -> ProxyF f a -> ProxyF f b
forall a b. (a -> b) -> ProxyF f a -> ProxyF f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> ProxyF f b -> ProxyF f a
$c<$ :: forall k (f :: k) a b. a -> ProxyF f b -> ProxyF f a
fmap :: forall a b. (a -> b) -> ProxyF f a -> ProxyF f b
$cfmap :: forall k (f :: k) a b. (a -> b) -> ProxyF f a -> ProxyF f b
Functor, forall k (f :: k) a. Eq a => a -> ProxyF f a -> Bool
forall k (f :: k) a. Num a => ProxyF f a -> a
forall k (f :: k) a. Ord a => ProxyF f a -> a
forall k (f :: k) m. Monoid m => ProxyF f m -> m
forall k (f :: k) a. ProxyF f a -> Bool
forall k (f :: k) a. ProxyF f a -> Int
forall k (f :: k) a. ProxyF f a -> [a]
forall k (f :: k) a. (a -> a -> a) -> ProxyF f a -> a
forall k (f :: k) m a. Monoid m => (a -> m) -> ProxyF f a -> m
forall k (f :: k) b a. (b -> a -> b) -> b -> ProxyF f a -> b
forall k (f :: k) a b. (a -> b -> b) -> b -> ProxyF f a -> b
forall m a. Monoid m => (a -> m) -> ProxyF f a -> m
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => ProxyF f a -> a
$cproduct :: forall k (f :: k) a. Num a => ProxyF f a -> a
sum :: forall a. Num a => ProxyF f a -> a
$csum :: forall k (f :: k) a. Num a => ProxyF f a -> a
minimum :: forall a. Ord a => ProxyF f a -> a
$cminimum :: forall k (f :: k) a. Ord a => ProxyF f a -> a
maximum :: forall a. Ord a => ProxyF f a -> a
$cmaximum :: forall k (f :: k) a. Ord a => ProxyF f a -> a
elem :: forall a. Eq a => a -> ProxyF f a -> Bool
$celem :: forall k (f :: k) a. Eq a => a -> ProxyF f a -> Bool
length :: forall a. ProxyF f a -> Int
$clength :: forall k (f :: k) a. ProxyF f a -> Int
null :: forall a. ProxyF f a -> Bool
$cnull :: forall k (f :: k) a. ProxyF f a -> Bool
toList :: forall a. ProxyF f a -> [a]
$ctoList :: forall k (f :: k) a. ProxyF f a -> [a]
foldl1 :: forall a. (a -> a -> a) -> ProxyF f a -> a
$cfoldl1 :: forall k (f :: k) a. (a -> a -> a) -> ProxyF f a -> a
foldr1 :: forall a. (a -> a -> a) -> ProxyF f a -> a
$cfoldr1 :: forall k (f :: k) a. (a -> a -> a) -> ProxyF f a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> ProxyF f a -> b
$cfoldl' :: forall k (f :: k) b a. (b -> a -> b) -> b -> ProxyF f a -> b
foldl :: forall b a. (b -> a -> b) -> b -> ProxyF f a -> b
$cfoldl :: forall k (f :: k) b a. (b -> a -> b) -> b -> ProxyF f a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> ProxyF f a -> b
$cfoldr' :: forall k (f :: k) a b. (a -> b -> b) -> b -> ProxyF f a -> b
foldr :: forall a b. (a -> b -> b) -> b -> ProxyF f a -> b
$cfoldr :: forall k (f :: k) a b. (a -> b -> b) -> b -> ProxyF f a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> ProxyF f a -> m
$cfoldMap' :: forall k (f :: k) m a. Monoid m => (a -> m) -> ProxyF f a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> ProxyF f a -> m
$cfoldMap :: forall k (f :: k) m a. Monoid m => (a -> m) -> ProxyF f a -> m
fold :: forall m. Monoid m => ProxyF f m -> m
$cfold :: forall k (f :: k) m. Monoid m => ProxyF f m -> m
Foldable, forall k (f :: k). Functor (ProxyF f)
forall k (f :: k). Foldable (ProxyF f)
forall k (f :: k) (m :: * -> *) a.
Monad m =>
ProxyF f (m a) -> m (ProxyF f a)
forall k (f :: k) (f :: * -> *) a.
Applicative f =>
ProxyF f (f a) -> f (ProxyF f a)
forall k (f :: k) (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ProxyF f a -> m (ProxyF f b)
forall k (f :: k) (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ProxyF f a -> f (ProxyF f b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ProxyF f a -> f (ProxyF f b)
sequence :: forall (m :: * -> *) a. Monad m => ProxyF f (m a) -> m (ProxyF f a)
$csequence :: forall k (f :: k) (m :: * -> *) a.
Monad m =>
ProxyF f (m a) -> m (ProxyF f a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ProxyF f a -> m (ProxyF f b)
$cmapM :: forall k (f :: k) (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ProxyF f a -> m (ProxyF f b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
ProxyF f (f a) -> f (ProxyF f a)
$csequenceA :: forall k (f :: k) (f :: * -> *) a.
Applicative f =>
ProxyF f (f a) -> f (ProxyF f a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ProxyF f a -> f (ProxyF f b)
$ctraverse :: forall k (f :: k) (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ProxyF f a -> f (ProxyF f b)
Traversable, Typeable, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall k (f :: k) k (a :: k) x. Rep (ProxyF f a) x -> ProxyF f a
forall k (f :: k) k (a :: k) x. ProxyF f a -> Rep (ProxyF f a) x
$cto :: forall k (f :: k) k (a :: k) x. Rep (ProxyF f a) x -> ProxyF f a
$cfrom :: forall k (f :: k) k (a :: k) x. ProxyF f a -> Rep (ProxyF f a) x
Generic, ProxyF f a -> DataType
ProxyF f a -> Constr
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall {k} {f :: k} {k} {a :: k}.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
Typeable (ProxyF f a)
forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
ProxyF f a -> DataType
forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
ProxyF f a -> Constr
forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall b. Data b => b -> b) -> ProxyF f a -> ProxyF f a
forall k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
Int -> (forall d. Data d => d -> u) -> ProxyF f a -> u
forall k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall d. Data d => d -> u) -> ProxyF f a -> [u]
forall k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
forall k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
forall k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Monad m) =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
forall k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
forall k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ProxyF f a)
forall k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ProxyF f a -> c (ProxyF f a)
forall k (f :: k) k (a :: k) (t :: * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ProxyF f a))
forall k (f :: k) k (a :: k) (t :: * -> * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ProxyF f a))
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ProxyF f a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ProxyF f a -> c (ProxyF f a)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
$cgmapMo :: forall k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
$cgmapMp :: forall k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
$cgmapM :: forall k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Monad m) =>
(forall d. Data d => d -> m d) -> ProxyF f a -> m (ProxyF f a)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ProxyF f a -> u
$cgmapQi :: forall k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
Int -> (forall d. Data d => d -> u) -> ProxyF f a -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ProxyF f a -> [u]
$cgmapQ :: forall k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall d. Data d => d -> u) -> ProxyF f a -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
$cgmapQr :: forall k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
$cgmapQl :: forall k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ProxyF f a -> r
gmapT :: (forall b. Data b => b -> b) -> ProxyF f a -> ProxyF f a
$cgmapT :: forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall b. Data b => b -> b) -> ProxyF f a -> ProxyF f a
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ProxyF f a))
$cdataCast2 :: forall k (f :: k) k (a :: k) (t :: * -> * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ProxyF f a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (ProxyF f a))
$cdataCast1 :: forall k (f :: k) k (a :: k) (t :: * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ProxyF f a))
dataTypeOf :: ProxyF f a -> DataType
$cdataTypeOf :: forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
ProxyF f a -> DataType
toConstr :: ProxyF f a -> Constr
$ctoConstr :: forall k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
ProxyF f a -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ProxyF f a)
$cgunfold :: forall k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ProxyF f a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ProxyF f a -> c (ProxyF f a)
$cgfoldl :: forall k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ProxyF f a -> c (ProxyF f a)
Data)
deriveShow1 ''ProxyF
deriveRead1 ''ProxyF
deriveEq1 ''ProxyF
deriveOrd1 ''ProxyF
instance Contravariant (ProxyF f) where
contramap :: forall a' a. (a' -> a) -> ProxyF f a -> ProxyF f a'
contramap a' -> a
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
instance Divisible (ProxyF f) where
divide :: forall a b c.
(a -> (b, c)) -> ProxyF f b -> ProxyF f c -> ProxyF f a
divide a -> (b, c)
_ ProxyF f b
_ ProxyF f c
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
conquer :: forall a. ProxyF f a
conquer = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Divise (ProxyF f) where
divise :: forall a b c.
(a -> (b, c)) -> ProxyF f b -> ProxyF f c -> ProxyF f a
divise a -> (b, c)
_ ProxyF f b
_ ProxyF f c
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Decide (ProxyF f) where
decide :: forall a b c.
(a -> Either b c) -> ProxyF f b -> ProxyF f c -> ProxyF f a
decide a -> Either b c
_ ProxyF f b
_ ProxyF f c
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Conclude (ProxyF f) where
conclude :: forall a. (a -> Void) -> ProxyF f a
conclude a -> Void
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Decidable (ProxyF f) where
choose :: forall a b c.
(a -> Either b c) -> ProxyF f b -> ProxyF f c -> ProxyF f a
choose a -> Either b c
_ ProxyF f b
_ ProxyF f c
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
lose :: forall a. (a -> Void) -> ProxyF f a
lose a -> Void
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Invariant (ProxyF f) where
invmap :: forall a b. (a -> b) -> (b -> a) -> ProxyF f a -> ProxyF f b
invmap a -> b
_ b -> a
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
instance HFunctor ProxyF where
hmap :: forall (f :: k -> *) (g :: k -> *).
(f ~> g) -> ProxyF f ~> ProxyF g
hmap f ~> g
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
data ConstF e f a = ConstF { forall {k} {k} e (f :: k) (a :: k). ConstF e f a -> e
getConstF :: e }
deriving (Int -> ConstF e f a -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall e k (f :: k) k (a :: k).
Show e =>
Int -> ConstF e f a -> ShowS
forall e k (f :: k) k (a :: k). Show e => [ConstF e f a] -> ShowS
forall e k (f :: k) k (a :: k). Show e => ConstF e f a -> String
showList :: [ConstF e f a] -> ShowS
$cshowList :: forall e k (f :: k) k (a :: k). Show e => [ConstF e f a] -> ShowS
show :: ConstF e f a -> String
$cshow :: forall e k (f :: k) k (a :: k). Show e => ConstF e f a -> String
showsPrec :: Int -> ConstF e f a -> ShowS
$cshowsPrec :: forall e k (f :: k) k (a :: k).
Show e =>
Int -> ConstF e f a -> ShowS
Show, ReadPrec [ConstF e f a]
ReadPrec (ConstF e f a)
ReadS [ConstF e f a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall e k (f :: k) k (a :: k). Read e => ReadPrec [ConstF e f a]
forall e k (f :: k) k (a :: k). Read e => ReadPrec (ConstF e f a)
forall e k (f :: k) k (a :: k).
Read e =>
Int -> ReadS (ConstF e f a)
forall e k (f :: k) k (a :: k). Read e => ReadS [ConstF e f a]
readListPrec :: ReadPrec [ConstF e f a]
$creadListPrec :: forall e k (f :: k) k (a :: k). Read e => ReadPrec [ConstF e f a]
readPrec :: ReadPrec (ConstF e f a)
$creadPrec :: forall e k (f :: k) k (a :: k). Read e => ReadPrec (ConstF e f a)
readList :: ReadS [ConstF e f a]
$creadList :: forall e k (f :: k) k (a :: k). Read e => ReadS [ConstF e f a]
readsPrec :: Int -> ReadS (ConstF e f a)
$creadsPrec :: forall e k (f :: k) k (a :: k).
Read e =>
Int -> ReadS (ConstF e f a)
Read, ConstF e f a -> ConstF e f a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall e k (f :: k) k (a :: k).
Eq e =>
ConstF e f a -> ConstF e f a -> Bool
/= :: ConstF e f a -> ConstF e f a -> Bool
$c/= :: forall e k (f :: k) k (a :: k).
Eq e =>
ConstF e f a -> ConstF e f a -> Bool
== :: ConstF e f a -> ConstF e f a -> Bool
$c== :: forall e k (f :: k) k (a :: k).
Eq e =>
ConstF e f a -> ConstF e f a -> Bool
Eq, ConstF e f a -> ConstF e f a -> Bool
ConstF e f a -> ConstF e f a -> Ordering
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {e} {k} {f :: k} {k} {a :: k}. Ord e => Eq (ConstF e f a)
forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Bool
forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Ordering
forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> ConstF e f a
min :: ConstF e f a -> ConstF e f a -> ConstF e f a
$cmin :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> ConstF e f a
max :: ConstF e f a -> ConstF e f a -> ConstF e f a
$cmax :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> ConstF e f a
>= :: ConstF e f a -> ConstF e f a -> Bool
$c>= :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Bool
> :: ConstF e f a -> ConstF e f a -> Bool
$c> :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Bool
<= :: ConstF e f a -> ConstF e f a -> Bool
$c<= :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Bool
< :: ConstF e f a -> ConstF e f a -> Bool
$c< :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Bool
compare :: ConstF e f a -> ConstF e f a -> Ordering
$ccompare :: forall e k (f :: k) k (a :: k).
Ord e =>
ConstF e f a -> ConstF e f a -> Ordering
Ord, forall a b. (a -> b) -> ConstF e f a -> ConstF e f b
forall e k (f :: k) a b. a -> ConstF e f b -> ConstF e f a
forall e k (f :: k) a b. (a -> b) -> ConstF e f a -> ConstF e f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> ConstF e f b -> ConstF e f a
$c<$ :: forall e k (f :: k) a b. a -> ConstF e f b -> ConstF e f a
fmap :: forall a b. (a -> b) -> ConstF e f a -> ConstF e f b
$cfmap :: forall e k (f :: k) a b. (a -> b) -> ConstF e f a -> ConstF e f b
Functor, forall m a. Monoid m => (a -> m) -> ConstF e f a -> m
forall e k (f :: k) a. Eq a => a -> ConstF e f a -> Bool
forall e k (f :: k) a. Num a => ConstF e f a -> a
forall e k (f :: k) a. Ord a => ConstF e f a -> a
forall e k (f :: k) m. Monoid m => ConstF e f m -> m
forall e k (f :: k) a. ConstF e f a -> Bool
forall e k (f :: k) a. ConstF e f a -> Int
forall e k (f :: k) a. ConstF e f a -> [a]
forall e k (f :: k) a. (a -> a -> a) -> ConstF e f a -> a
forall e k (f :: k) m a. Monoid m => (a -> m) -> ConstF e f a -> m
forall e k (f :: k) b a. (b -> a -> b) -> b -> ConstF e f a -> b
forall e k (f :: k) a b. (a -> b -> b) -> b -> ConstF e f a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => ConstF e f a -> a
$cproduct :: forall e k (f :: k) a. Num a => ConstF e f a -> a
sum :: forall a. Num a => ConstF e f a -> a
$csum :: forall e k (f :: k) a. Num a => ConstF e f a -> a
minimum :: forall a. Ord a => ConstF e f a -> a
$cminimum :: forall e k (f :: k) a. Ord a => ConstF e f a -> a
maximum :: forall a. Ord a => ConstF e f a -> a
$cmaximum :: forall e k (f :: k) a. Ord a => ConstF e f a -> a
elem :: forall a. Eq a => a -> ConstF e f a -> Bool
$celem :: forall e k (f :: k) a. Eq a => a -> ConstF e f a -> Bool
length :: forall a. ConstF e f a -> Int
$clength :: forall e k (f :: k) a. ConstF e f a -> Int
null :: forall a. ConstF e f a -> Bool
$cnull :: forall e k (f :: k) a. ConstF e f a -> Bool
toList :: forall a. ConstF e f a -> [a]
$ctoList :: forall e k (f :: k) a. ConstF e f a -> [a]
foldl1 :: forall a. (a -> a -> a) -> ConstF e f a -> a
$cfoldl1 :: forall e k (f :: k) a. (a -> a -> a) -> ConstF e f a -> a
foldr1 :: forall a. (a -> a -> a) -> ConstF e f a -> a
$cfoldr1 :: forall e k (f :: k) a. (a -> a -> a) -> ConstF e f a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> ConstF e f a -> b
$cfoldl' :: forall e k (f :: k) b a. (b -> a -> b) -> b -> ConstF e f a -> b
foldl :: forall b a. (b -> a -> b) -> b -> ConstF e f a -> b
$cfoldl :: forall e k (f :: k) b a. (b -> a -> b) -> b -> ConstF e f a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> ConstF e f a -> b
$cfoldr' :: forall e k (f :: k) a b. (a -> b -> b) -> b -> ConstF e f a -> b
foldr :: forall a b. (a -> b -> b) -> b -> ConstF e f a -> b
$cfoldr :: forall e k (f :: k) a b. (a -> b -> b) -> b -> ConstF e f a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> ConstF e f a -> m
$cfoldMap' :: forall e k (f :: k) m a. Monoid m => (a -> m) -> ConstF e f a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> ConstF e f a -> m
$cfoldMap :: forall e k (f :: k) m a. Monoid m => (a -> m) -> ConstF e f a -> m
fold :: forall m. Monoid m => ConstF e f m -> m
$cfold :: forall e k (f :: k) m. Monoid m => ConstF e f m -> m
Foldable, forall e k (f :: k). Functor (ConstF e f)
forall e k (f :: k). Foldable (ConstF e f)
forall e k (f :: k) (m :: * -> *) a.
Monad m =>
ConstF e f (m a) -> m (ConstF e f a)
forall e k (f :: k) (f :: * -> *) a.
Applicative f =>
ConstF e f (f a) -> f (ConstF e f a)
forall e k (f :: k) (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ConstF e f a -> m (ConstF e f b)
forall e k (f :: k) (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ConstF e f a -> f (ConstF e f b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ConstF e f a -> f (ConstF e f b)
sequence :: forall (m :: * -> *) a.
Monad m =>
ConstF e f (m a) -> m (ConstF e f a)
$csequence :: forall e k (f :: k) (m :: * -> *) a.
Monad m =>
ConstF e f (m a) -> m (ConstF e f a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ConstF e f a -> m (ConstF e f b)
$cmapM :: forall e k (f :: k) (m :: * -> *) a b.
Monad m =>
(a -> m b) -> ConstF e f a -> m (ConstF e f b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
ConstF e f (f a) -> f (ConstF e f a)
$csequenceA :: forall e k (f :: k) (f :: * -> *) a.
Applicative f =>
ConstF e f (f a) -> f (ConstF e f a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ConstF e f a -> f (ConstF e f b)
$ctraverse :: forall e k (f :: k) (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> ConstF e f a -> f (ConstF e f b)
Traversable, Typeable, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall e k (f :: k) k (a :: k) x.
Rep (ConstF e f a) x -> ConstF e f a
forall e k (f :: k) k (a :: k) x.
ConstF e f a -> Rep (ConstF e f a) x
$cto :: forall e k (f :: k) k (a :: k) x.
Rep (ConstF e f a) x -> ConstF e f a
$cfrom :: forall e k (f :: k) k (a :: k) x.
ConstF e f a -> Rep (ConstF e f a) x
Generic, ConstF e f a -> DataType
ConstF e f a -> Constr
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall {e} {k} {f :: k} {k} {a :: k}.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
Typeable (ConstF e f a)
forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
ConstF e f a -> DataType
forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
ConstF e f a -> Constr
forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall b. Data b => b -> b) -> ConstF e f a -> ConstF e f a
forall e k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
Int -> (forall d. Data d => d -> u) -> ConstF e f a -> u
forall e k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall d. Data d => d -> u) -> ConstF e f a -> [u]
forall e k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
forall e k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
forall e k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Monad m) =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
forall e k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
MonadPlus m) =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
forall e k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ConstF e f a)
forall e k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConstF e f a -> c (ConstF e f a)
forall e k (f :: k) k (a :: k) (t :: * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ConstF e f a))
forall e k (f :: k) k (a :: k) (t :: * -> * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ConstF e f a))
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ConstF e f a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConstF e f a -> c (ConstF e f a)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
$cgmapMo :: forall e k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
MonadPlus m) =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
$cgmapMp :: forall e k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
MonadPlus m) =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
$cgmapM :: forall e k (f :: k) k (a :: k) (m :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Monad m) =>
(forall d. Data d => d -> m d) -> ConstF e f a -> m (ConstF e f a)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ConstF e f a -> u
$cgmapQi :: forall e k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
Int -> (forall d. Data d => d -> u) -> ConstF e f a -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ConstF e f a -> [u]
$cgmapQ :: forall e k (f :: k) k (a :: k) u.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall d. Data d => d -> u) -> ConstF e f a -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
$cgmapQr :: forall e k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
$cgmapQl :: forall e k (f :: k) k (a :: k) r r'.
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConstF e f a -> r
gmapT :: (forall b. Data b => b -> b) -> ConstF e f a -> ConstF e f a
$cgmapT :: forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall b. Data b => b -> b) -> ConstF e f a -> ConstF e f a
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ConstF e f a))
$cdataCast2 :: forall e k (f :: k) k (a :: k) (t :: * -> * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ConstF e f a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (ConstF e f a))
$cdataCast1 :: forall e k (f :: k) k (a :: k) (t :: * -> *) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e,
Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ConstF e f a))
dataTypeOf :: ConstF e f a -> DataType
$cdataTypeOf :: forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
ConstF e f a -> DataType
toConstr :: ConstF e f a -> Constr
$ctoConstr :: forall e k (f :: k) k (a :: k).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
ConstF e f a -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ConstF e f a)
$cgunfold :: forall e k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ConstF e f a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConstF e f a -> c (ConstF e f a)
$cgfoldl :: forall e k (f :: k) k (a :: k) (c :: * -> *).
(Typeable f, Typeable a, Typeable k, Typeable k, Data e) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConstF e f a -> c (ConstF e f a)
Data)
deriveShow1 ''ConstF
deriveRead1 ''ConstF
deriveEq1 ''ConstF
deriveOrd1 ''ConstF
instance Contravariant (ConstF e f) where
contramap :: forall a' a. (a' -> a) -> ConstF e f a -> ConstF e f a'
contramap a' -> a
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
instance Monoid e => Divisible (ConstF e f) where
divide :: forall a b c.
(a -> (b, c)) -> ConstF e f b -> ConstF e f c -> ConstF e f a
divide a -> (b, c)
_ (ConstF e
x) (ConstF e
y) = forall {k} {k} e (f :: k) (a :: k). e -> ConstF e f a
ConstF (e
x forall a. Semigroup a => a -> a -> a
<> e
y)
conquer :: forall a. ConstF e f a
conquer = forall {k} {k} e (f :: k) (a :: k). e -> ConstF e f a
ConstF forall a. Monoid a => a
mempty
instance Semigroup e => Divise (ConstF e f) where
divise :: forall a b c.
(a -> (b, c)) -> ConstF e f b -> ConstF e f c -> ConstF e f a
divise a -> (b, c)
_ (ConstF e
x) (ConstF e
y) = forall {k} {k} e (f :: k) (a :: k). e -> ConstF e f a
ConstF (e
x forall a. Semigroup a => a -> a -> a
<> e
y)
instance Invariant (ConstF e f) where
invmap :: forall a b. (a -> b) -> (b -> a) -> ConstF e f a -> ConstF e f b
invmap a -> b
_ b -> a
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
instance HFunctor (ConstF e) where
hmap :: forall (f :: k -> *) (g :: k -> *).
(f ~> g) -> ConstF e f ~> ConstF e g
hmap f ~> g
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
data HLift t f a = HPure (f a)
| HOther (t f a)
deriving forall a b. a -> HLift t f b -> HLift t f a
forall a b. (a -> b) -> HLift t f a -> HLift t f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Functor f, Functor (t f)) =>
a -> HLift t f b -> HLift t f a
forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Functor f, Functor (t f)) =>
(a -> b) -> HLift t f a -> HLift t f b
<$ :: forall a b. a -> HLift t f b -> HLift t f a
$c<$ :: forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Functor f, Functor (t f)) =>
a -> HLift t f b -> HLift t f a
fmap :: forall a b. (a -> b) -> HLift t f a -> HLift t f b
$cfmap :: forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Functor f, Functor (t f)) =>
(a -> b) -> HLift t f a -> HLift t f b
Functor
instance (Show1 (t f), Show1 f) => Show1 (HLift t f) where
liftShowsPrec :: forall a.
(Int -> a -> ShowS)
-> ([a] -> ShowS) -> Int -> HLift t f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl Int
d = \case
HPure f a
x -> forall a. (Int -> a -> ShowS) -> String -> Int -> a -> ShowS
showsUnaryWith (forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl) String
"HPure" Int
d f a
x
HOther t f a
x -> forall a. (Int -> a -> ShowS) -> String -> Int -> a -> ShowS
showsUnaryWith (forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl) String
"HOther" Int
d t f a
x
deriving instance (Show (f a), Show (t f a)) => Show (HLift t f a)
deriving instance (Read (f a), Read (t f a)) => Read (HLift t f a)
deriving instance (Eq (f a), Eq (t f a)) => Eq (HLift t f a)
deriving instance (Ord (f a), Ord (t f a)) => Ord (HLift t f a)
instance (Eq1 (t f), Eq1 f) => Eq1 (HLift t f) where
liftEq :: forall a b. (a -> b -> Bool) -> HLift t f a -> HLift t f b -> Bool
liftEq a -> b -> Bool
eq = \case
HPure f a
x -> \case
HPure f b
y -> forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> f a -> f b -> Bool
liftEq a -> b -> Bool
eq f a
x f b
y
HOther t f b
_ -> Bool
False
HOther t f a
x -> \case
HPure f b
_ -> Bool
False
HOther t f b
y -> forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> f a -> f b -> Bool
liftEq a -> b -> Bool
eq t f a
x t f b
y
instance (Ord1 (t f), Ord1 f) => Ord1 (HLift t f) where
liftCompare :: forall a b.
(a -> b -> Ordering) -> HLift t f a -> HLift t f b -> Ordering
liftCompare a -> b -> Ordering
c = \case
HPure f a
x -> \case
HPure f b
y -> forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> f a -> f b -> Ordering
liftCompare a -> b -> Ordering
c f a
x f b
y
HOther t f b
_ -> Ordering
LT
HOther t f a
x -> \case
HPure f b
_ -> Ordering
GT
HOther t f b
y -> forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> f a -> f b -> Ordering
liftCompare a -> b -> Ordering
c t f a
x t f b
y
instance HFunctor t => HFunctor (HLift t) where
hmap :: forall (f :: k1 -> *) (g :: k1 -> *).
(f ~> g) -> HLift t f ~> HLift t g
hmap f ~> g
f = \case
HPure f x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure (f ~> g
f f x
x)
HOther t f x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther (forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap f ~> g
f t f x
x)
instance (Contravariant f, Contravariant (t f)) => Contravariant (HLift t f) where
contramap :: forall a' a. (a' -> a) -> HLift t f a -> HLift t f a'
contramap a' -> a
f = \case
HPure f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure (forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f f a
x)
HOther t f a
xs -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther (forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f t f a
xs)
instance (Invariant f, Invariant (t f)) => Invariant (HLift t f) where
invmap :: forall a b. (a -> b) -> (b -> a) -> HLift t f a -> HLift t f b
invmap a -> b
f b -> a
g = \case
HPure f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure (forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g f a
x)
HOther t f a
xs -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther (forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g t f a
xs)
retractHLift
:: Inject t
=> HLift t f a
-> t f a
retractHLift :: forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
Inject t =>
HLift t f a -> t f a
retractHLift = \case
HPure f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject f a
x
HOther t f a
x -> t f a
x
data HFree t f a = HReturn (f a)
| HJoin (t (HFree t f) a)
deriving instance (Functor f, Functor (t (HFree t f))) => Functor (HFree t f)
instance (Contravariant f, Contravariant (t (HFree t f))) => Contravariant (HFree t f) where
contramap :: forall a' a. (a' -> a) -> HFree t f a -> HFree t f a'
contramap a' -> a
f = \case
HReturn f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn (forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f f a
x)
HJoin t (HFree t f) a
xs -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin (forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a' -> a
f t (HFree t f) a
xs)
instance (Invariant f, Invariant (t (HFree t f))) => Invariant (HFree t f) where
invmap :: forall a b. (a -> b) -> (b -> a) -> HFree t f a -> HFree t f b
invmap a -> b
f b -> a
g = \case
HReturn f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn (forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g f a
x)
HJoin t (HFree t f) a
xs -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin (forall (f :: * -> *) a b.
Invariant f =>
(a -> b) -> (b -> a) -> f a -> f b
invmap a -> b
f b -> a
g t (HFree t f) a
xs)
foldHFree
:: forall t f g. HFunctor t
=> (f ~> g)
-> (t g ~> g)
-> (HFree t f ~> g)
foldHFree :: forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
HFunctor t =>
(f ~> g) -> (t g ~> g) -> HFree t f ~> g
foldHFree f ~> g
f t g ~> g
g = HFree t f ~> g
go
where
go :: HFree t f ~> g
go :: HFree t f ~> g
go (HReturn f x
x) = f ~> g
f f x
x
go (HJoin t (HFree t f) x
x) = t g ~> g
g (forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap HFree t f ~> g
go t (HFree t f) x
x)
retractHFree
:: HBind t
=> HFree t f a
-> t f a
retractHFree :: forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
HBind t =>
HFree t f a -> t f a
retractHFree = \case
HReturn f a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject f a
x
HJoin t (HFree t f) a
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
HBind t =>
(f ~> t g) -> t f ~> t g
hbind forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
HBind t =>
HFree t f a -> t f a
retractHFree t (HFree t f) a
x
instance (Show1 (t (HFree t f)), Show1 f) => Show1 (HFree t f) where
liftShowsPrec :: forall a.
(Int -> a -> ShowS)
-> ([a] -> ShowS) -> Int -> HFree t f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl Int
d = \case
HReturn f a
x -> forall a. (Int -> a -> ShowS) -> String -> Int -> a -> ShowS
showsUnaryWith (forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl) String
"HReturn" Int
d f a
x
HJoin t (HFree t f) a
x -> forall a. (Int -> a -> ShowS) -> String -> Int -> a -> ShowS
showsUnaryWith (forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
liftShowsPrec Int -> a -> ShowS
sp [a] -> ShowS
sl) String
"HJoin" Int
d t (HFree t f) a
x
instance (Show1 (t (HFree t f)), Show1 f, Show a) => Show (HFree t f a) where
showsPrec :: Int -> HFree t f a -> ShowS
showsPrec = forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
liftShowsPrec forall a. Show a => Int -> a -> ShowS
showsPrec forall a. Show a => [a] -> ShowS
showList
instance HFunctor t => HFunctor (HFree t) where
hmap :: forall f g. (f ~> g) -> HFree t f ~> HFree t g
hmap :: forall (f :: k1 -> *) (g :: k1 -> *).
(f ~> g) -> HFree t f ~> HFree t g
hmap f ~> g
f = HFree t f ~> HFree t g
go
where
go :: HFree t f ~> HFree t g
go :: HFree t f ~> HFree t g
go = \case
HReturn f x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn (f ~> g
f f x
x)
HJoin t (HFree t f) x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin (forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap HFree t f ~> HFree t g
go t (HFree t f) x
x)
class HFunctor t => Inject t where
inject :: f ~> t f
{-# MINIMAL inject #-}
injectMap :: (Inject t, Functor f) => (a -> b) -> f a -> t f b
injectMap :: forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Inject t, Functor f) =>
(a -> b) -> f a -> t f b
injectMap a -> b
f = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f
injectContramap :: (Inject t, Contravariant f) => (a -> b) -> f b -> t f a
injectContramap :: forall (t :: (* -> *) -> * -> *) (f :: * -> *) a b.
(Inject t, Contravariant f) =>
(a -> b) -> f b -> t f a
injectContramap a -> b
f = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a -> b
f
class Inject t => HBind t where
hbind :: (f ~> t g) -> t f ~> t g
hbind f ~> t g
f = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
HBind t =>
t (t f) ~> t f
hjoin forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap f ~> t g
f
hjoin :: t (t f) ~> t f
hjoin = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
HBind t =>
(f ~> t g) -> t f ~> t g
hbind forall a. a -> a
id
{-# MINIMAL hbind | hjoin #-}
instance Inject Coyoneda where
inject :: forall (f :: * -> *). f ~> Coyoneda f
inject = forall (f :: * -> *). f ~> Coyoneda f
liftCoyoneda
instance Inject CCY.Coyoneda where
inject :: forall (f :: * -> *). f ~> Coyoneda f
inject = forall (f :: * -> *). f ~> Coyoneda f
CCY.liftCoyoneda
instance Inject Ap where
inject :: forall (f :: * -> *). f ~> Ap f
inject = forall (f :: * -> *). f ~> Ap f
liftAp
instance Inject ListF where
inject :: forall (f :: k -> *). f ~> ListF f
inject = forall {k} (f :: k -> *) (a :: k). [f a] -> ListF f a
ListF forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. a -> [a] -> [a]
:[])
instance Inject NonEmptyF where
inject :: forall (f :: k -> *). f ~> NonEmptyF f
inject = forall {k} (f :: k -> *) (a :: k). NonEmpty (f a) -> NonEmptyF f a
NonEmptyF forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. a -> [a] -> NonEmpty a
:| [])
instance Inject MaybeF where
inject :: forall (f :: k -> *). f ~> MaybeF f
inject = forall {k} (f :: k -> *) (a :: k). Maybe (f a) -> MaybeF f a
MaybeF forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just
instance Monoid k => Inject (NEMapF k) where
inject :: forall (f :: k -> *). f ~> NEMapF k f
inject = forall {k} k1 (f :: k -> *) (a :: k).
NEMap k1 (f a) -> NEMapF k1 f a
NEMapF forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k a. k -> a -> NEMap k a
NEM.singleton forall a. Monoid a => a
mempty
instance Monoid k => Inject (MapF k) where
inject :: forall (f :: k -> *). f ~> MapF k f
inject = forall {k} k1 (f :: k -> *) (a :: k). Map k1 (f a) -> MapF k1 f a
MapF forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k a. k -> a -> Map k a
M.singleton forall a. Monoid a => a
mempty
instance Inject Step where
inject :: forall (f :: k -> *). f ~> Step f
inject = forall {k} (f :: k -> *) (a :: k). Natural -> f a -> Step f a
Step Natural
0
instance Inject Steps where
inject :: forall (f :: k -> *). f ~> Steps f
inject = forall {k} (f :: k -> *) (a :: k). NEMap Natural (f a) -> Steps f a
Steps forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k a. k -> a -> NEMap k a
NEM.singleton Natural
0
instance Inject Flagged where
inject :: forall (f :: k -> *). f ~> Flagged f
inject = forall {k} (f :: k -> *) (a :: k). Bool -> f a -> Flagged f a
Flagged Bool
False
instance Inject (These1 f) where
inject :: forall (f :: * -> *). f ~> These1 f f
inject = forall (f :: * -> *) (f :: * -> *). f ~> These1 f f
That1
instance Applicative f => Inject (Comp f :: (Type -> Type) -> Type -> Type) where
inject :: forall (f :: * -> *). f ~> Comp f f
inject f x
x = forall (f :: * -> *) a. Applicative f => a -> f a
pure () forall {k} (f :: * -> *) (g :: k -> *) (a :: k) x.
f x -> (x -> g a) -> Comp f g a
:>>= forall a b. a -> b -> a
const f x
x
instance Applicative f => Inject ((:.:) f) where
inject :: forall (f :: k -> *). f ~> (f :.: f)
inject f x
x = forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1).
f (g p) -> (:.:) f g p
Comp1 forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. Applicative f => a -> f a
pure f x
x
instance Plus f => Inject ((:*:) f) where
inject :: forall (f :: * -> *). f ~> (f :*: f)
inject = (forall (f :: * -> *) a. Plus f => f a
zero forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:)
instance Plus f => Inject (Product f) where
inject :: forall (f :: * -> *). f ~> Product f f
inject = forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Pair forall (f :: * -> *) a. Plus f => f a
zero
instance Inject ((:+:) f) where
inject :: forall (f :: k -> *). f ~> (f :+: f)
inject = forall k (f :: k -> *) (f :: k -> *). f ~> (f :+: f)
R1
instance Inject (Sum f) where
inject :: forall (f :: k -> *). f ~> Sum f f
inject = forall k (f :: k -> *) (f :: k -> *). f ~> Sum f f
InR
instance Inject (M1 i c) where
inject :: forall (f :: k -> *). f ~> M1 i c f
inject = forall k i (c :: Meta) (f :: k -> *). f ~> M1 i c f
M1
instance Inject Alt.Alt where
inject :: forall (f :: * -> *). f ~> Alt f
inject = forall (f :: * -> *). f ~> Alt f
Alt.liftAlt
instance Inject Free where
inject :: forall (f :: * -> *). f ~> Free f
inject = forall (f :: * -> *). f ~> Free f
liftFree
instance Inject Free1 where
inject :: forall (f :: * -> *). f ~> Free1 f
inject = forall (f :: * -> *). f ~> Free1 f
liftFree1
instance Inject FA.Ap where
inject :: forall (f :: * -> *). f ~> Ap f
inject = forall (f :: * -> *). f ~> Ap f
FA.liftAp
instance Inject FAF.Ap where
inject :: forall (f :: * -> *). f ~> Ap f
inject = forall (f :: * -> *). f ~> Ap f
FAF.liftAp
instance Inject IdentityT where
inject :: forall (f :: k -> *). f ~> IdentityT f
inject = coerce :: forall a b. Coercible a b => a -> b
coerce
instance Inject Lift where
inject :: forall (f :: * -> *). f ~> Lift f
inject = forall (f :: * -> *). f ~> Lift f
Other
instance Inject MaybeApply where
inject :: forall (f :: * -> *). f ~> MaybeApply f
inject = forall (f :: * -> *) a. Either (f a) a -> MaybeApply f a
MaybeApply forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left
instance Inject Backwards where
inject :: forall (f :: k -> *). f ~> Backwards f
inject = forall k (f :: k -> *). f ~> Backwards f
Backwards
instance Inject WrappedApplicative where
inject :: forall (f :: * -> *). f ~> WrappedApplicative f
inject = forall (f :: * -> *). f ~> WrappedApplicative f
WrapApplicative
instance Inject (ReaderT r) where
inject :: forall (f :: * -> *). f ~> ReaderT r f
inject = forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> b -> a
const
instance Monoid e => Inject (EnvT e) where
inject :: forall (f :: * -> *). f ~> EnvT e f
inject = forall e (w :: * -> *) a. e -> w a -> EnvT e w a
EnvT forall a. Monoid a => a
mempty
instance Inject Reverse where
inject :: forall (f :: k -> *). f ~> Reverse f
inject = forall k (f :: k -> *). f ~> Reverse f
Reverse
instance Inject ProxyF where
inject :: forall (f :: k -> *). f ~> ProxyF f
inject f x
_ = forall {k} {k} (f :: k) (a :: k). ProxyF f a
ProxyF
instance Monoid e => Inject (ConstF e) where
inject :: forall (f :: k -> *). f ~> ConstF e f
inject f x
_ = forall {k} {k} e (f :: k) (a :: k). e -> ConstF e f a
ConstF forall a. Monoid a => a
mempty
instance (Inject s, Inject t) => Inject (ComposeT s t) where
inject :: forall (f :: * -> *). f ~> ComposeT s t f
inject = forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
(m :: * -> *) a.
f (g m) a -> ComposeT f g m a
ComposeT forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject
instance HFunctor t => Inject (HLift t) where
inject :: forall (f :: k -> *). f ~> HLift t f
inject = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure
instance HFunctor t => Inject (HFree t) where
inject :: forall (f :: k -> *). f ~> HFree t f
inject = forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn
instance HBind Coyoneda where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> Coyoneda g) -> Coyoneda f ~> Coyoneda g
hbind f ~> Coyoneda g
f (Coyoneda b -> x
g f b
x) = b -> x
g forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f ~> Coyoneda g
f f b
x
instance HBind Ap where
hbind :: forall (f :: * -> *) (g :: * -> *). (f ~> Ap g) -> Ap f ~> Ap g
hbind f ~> Ap g
f Ap f x
x = forall (g :: * -> *) (f :: * -> *) a.
Applicative g =>
(forall x. f x -> g x) -> Ap f a -> g a
runAp f ~> Ap g
f Ap f x
x
instance HBind ListF where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> ListF g) -> ListF f ~> ListF g
hbind f ~> ListF g
f = forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap f ~> ListF g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). ListF f a -> [f a]
runListF
instance HBind NonEmptyF where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> NonEmptyF g) -> NonEmptyF f ~> NonEmptyF g
hbind f ~> NonEmptyF g
f = forall (t :: * -> *) m a.
(Foldable1 t, Semigroup m) =>
(a -> m) -> t a -> m
foldMap1 f ~> NonEmptyF g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). NonEmptyF f a -> NonEmpty (f a)
runNonEmptyF
instance HBind MaybeF where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> MaybeF g) -> MaybeF f ~> MaybeF g
hbind f ~> MaybeF g
f = forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap f ~> MaybeF g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). MaybeF f a -> Maybe (f a)
runMaybeF
instance HBind Step where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> Step g) -> Step f ~> Step g
hbind f ~> Step g
f (Step Natural
n f x
x) = forall {k} (f :: k -> *) (a :: k). Natural -> f a -> Step f a
Step (Natural
n forall a. Num a => a -> a -> a
+ Natural
m) g x
y
where
Step Natural
m g x
y = f ~> Step g
f f x
x
instance HBind Flagged where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> Flagged g) -> Flagged f ~> Flagged g
hbind f ~> Flagged g
f (Flagged Bool
p f x
x) = forall {k} (f :: k -> *) (a :: k). Bool -> f a -> Flagged f a
Flagged (Bool
p Bool -> Bool -> Bool
|| Bool
q) g x
y
where
Flagged Bool
q g x
y = f ~> Flagged g
f f x
x
instance Alt f => HBind (These1 f) where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> These1 f g) -> These1 f f ~> These1 f g
hbind f ~> These1 f g
f = \case
This1 f x
x -> forall (f :: * -> *) (g :: * -> *) a. f a -> These1 f g a
This1 f x
x
That1 f x
y -> f ~> These1 f g
f f x
y
These1 f x
x f x
y -> case f ~> These1 f g
f f x
y of
This1 f x
x' -> forall (f :: * -> *) (g :: * -> *) a. f a -> These1 f g a
This1 (f x
x forall (f :: * -> *) a. Alt f => f a -> f a -> f a
<!> f x
x')
That1 g x
y' -> forall (f :: * -> *) (f :: * -> *). f ~> These1 f f
That1 g x
y'
These1 f x
x' g x
y' -> forall (f :: * -> *) (g :: * -> *) a. f a -> g a -> These1 f g a
These1 (f x
x forall (f :: * -> *) a. Alt f => f a -> f a -> f a
<!> f x
x') g x
y'
instance Plus f => HBind ((:*:) f) where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> (f :*: g)) -> (f :*: f) ~> (f :*: g)
hbind f ~> (f :*: g)
f (f x
x :*: f x
y) = (f x
x forall (f :: * -> *) a. Alt f => f a -> f a -> f a
<!> f x
x') forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: g x
y'
where
f x
x' :*: g x
y' = f ~> (f :*: g)
f f x
y
instance Plus f => HBind (Product f) where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> Product f g) -> Product f f ~> Product f g
hbind f ~> Product f g
f (Pair f x
x f x
y) = forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Pair (f x
x forall (f :: * -> *) a. Alt f => f a -> f a -> f a
<!> f x
x') g x
y'
where
Pair f x
x' g x
y' = f ~> Product f g
f f x
y
instance HBind ((:+:) f) where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> (f :+: g)) -> (f :+: f) ~> (f :+: g)
hbind f ~> (f :+: g)
f = \case
L1 f x
x -> forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 f x
x
R1 f x
y -> f ~> (f :+: g)
f f x
y
instance HBind (Sum f) where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> Sum f g) -> Sum f f ~> Sum f g
hbind f ~> Sum f g
f = \case
InL f x
x -> forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL f x
x
InR f x
y -> f ~> Sum f g
f f x
y
instance HBind (M1 i c) where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> M1 i c g) -> M1 i c f ~> M1 i c g
hbind f ~> M1 i c g
f (M1 f x
x) = f ~> M1 i c g
f f x
x
instance HBind Alt.Alt where
hbind :: forall (f :: * -> *) (g :: * -> *). (f ~> Alt g) -> Alt f ~> Alt g
hbind f ~> Alt g
f Alt f x
x = forall (f :: * -> *) (g :: * -> *) a.
Alternative g =>
(forall x. f x -> g x) -> Alt f a -> g a
Alt.runAlt f ~> Alt g
f Alt f x
x
instance HBind Free where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> Free g) -> Free f ~> Free g
hbind f ~> Free g
f Free f x
x = forall (g :: * -> *) (f :: * -> *).
Monad g =>
(f ~> g) -> Free f ~> g
interpretFree f ~> Free g
f Free f x
x
instance HBind Free1 where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> Free1 g) -> Free1 f ~> Free1 g
hbind f ~> Free1 g
f Free1 f x
x = forall (g :: * -> *) (f :: * -> *).
Bind g =>
(f ~> g) -> Free1 f ~> g
interpretFree1 f ~> Free1 g
f Free1 f x
x
instance HBind FA.Ap where
hbind :: forall (f :: * -> *) (g :: * -> *). (f ~> Ap g) -> Ap f ~> Ap g
hbind f ~> Ap g
f Ap f x
x = forall (g :: * -> *) (f :: * -> *) a.
Applicative g =>
(forall x. f x -> g x) -> Ap f a -> g a
FA.runAp f ~> Ap g
f Ap f x
x
instance HBind FAF.Ap where
hbind :: forall (f :: * -> *) (g :: * -> *). (f ~> Ap g) -> Ap f ~> Ap g
hbind f ~> Ap g
f Ap f x
x = forall (g :: * -> *) (f :: * -> *) a.
Applicative g =>
(forall x. f x -> g x) -> Ap f a -> g a
FAF.runAp f ~> Ap g
f Ap f x
x
instance HBind IdentityT where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> IdentityT g) -> IdentityT f ~> IdentityT g
hbind f ~> IdentityT g
f = f ~> IdentityT g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). IdentityT f a -> f a
runIdentityT
instance HBind Lift where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> Lift g) -> Lift f ~> Lift g
hbind f ~> Lift g
f Lift f x
x = forall a r (f :: * -> *). (a -> r) -> (f a -> r) -> Lift f a -> r
elimLift forall (p :: * -> *) a. Pointed p => a -> p a
point f ~> Lift g
f Lift f x
x
instance HBind MaybeApply where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> MaybeApply g) -> MaybeApply f ~> MaybeApply g
hbind f ~> MaybeApply g
f = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either f ~> MaybeApply g
f forall (p :: * -> *) a. Pointed p => a -> p a
point forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. MaybeApply f a -> Either (f a) a
runMaybeApply
instance HBind Backwards where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> Backwards g) -> Backwards f ~> Backwards g
hbind f ~> Backwards g
f = f ~> Backwards g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). Backwards f a -> f a
forwards
instance HBind WrappedApplicative where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> WrappedApplicative g)
-> WrappedApplicative f ~> WrappedApplicative g
hbind f ~> WrappedApplicative g
f = f ~> WrappedApplicative g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. WrappedApplicative f a -> f a
unwrapApplicative
instance HBind Reverse where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> Reverse g) -> Reverse f ~> Reverse g
hbind f ~> Reverse g
f = f ~> Reverse g
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (f :: k -> *) (a :: k). Reverse f a -> f a
getReverse
instance HBind ProxyF where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> ProxyF g) -> ProxyF f ~> ProxyF g
hbind f ~> ProxyF g
_ = coerce :: forall a b. Coercible a b => a -> b
coerce
instance Monoid e => HBind (EnvT e) where
hbind :: forall (f :: * -> *) (g :: * -> *).
(f ~> EnvT e g) -> EnvT e f ~> EnvT e g
hbind f ~> EnvT e g
f (EnvT e
e f x
x) = forall e (w :: * -> *) a. e -> w a -> EnvT e w a
EnvT (e
e forall a. Semigroup a => a -> a -> a
<> e
e') g x
y
where
EnvT e
e' g x
y = f ~> EnvT e g
f f x
x
instance HBind t => HBind (HLift t) where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> HLift t g) -> HLift t f ~> HLift t g
hbind f ~> HLift t g
f = \case
HPure f x
x -> f ~> HLift t g
f f x
x
HOther t f x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther forall a b. (a -> b) -> a -> b
$ (\f x
y -> case f ~> HLift t g
f f x
y of
HPure g x
z -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *).
Inject t =>
f ~> t f
inject g x
z
HOther t g x
z -> t g x
z) forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
HBind t =>
(f ~> t g) -> t f ~> t g
`hbind` t f x
x
instance HFunctor t => HBind (HFree t) where
hbind :: forall (f :: k -> *) (g :: k -> *).
(f ~> HFree t g) -> HFree t f ~> HFree t g
hbind f ~> HFree t g
f = \case
HReturn f x
x -> f ~> HFree t g
f f x
x
HJoin t (HFree t f) x
x -> forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin forall a b. (a -> b) -> a -> b
$ forall {k} {k1} (t :: (k -> *) -> k1 -> *) (f :: k -> *)
(g :: k -> *).
HFunctor t =>
(f ~> g) -> t f ~> t g
hmap (forall {k} (t :: (k -> *) -> k -> *) (f :: k -> *) (g :: k -> *).
HBind t =>
(f ~> t g) -> t f ~> t g
hbind f ~> HFree t g
f) t (HFree t f) x
x