Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Another go at constrained categories. This time without Prod, Coprod, Exp.
Synopsis
- data U2 a b = U2
- data (p :**: q) a b = (p a b) :**: (q a b)
- prod :: (p a b :* q a b) -> (p :**: q) a b
- unProd :: (p :**: q) a b -> p a b :* q a b
- exl2 :: (p :**: q) a b -> p a b
- exr2 :: (p :**: q) a b -> q a b
- newtype Monoid2 m a b = Monoid2 m
- class HasCon a where
- newtype Sat kon a = Sat (Dict (kon a))
- newtype a |- b = Entail (Con a :- Con b)
- (<+) :: Con a => (Con b => r) -> (a |- b) -> r
- type (&&) = (:*)
- class OpCon op con where
- yes1 :: c |- Sat Yes1 a
- forkCon :: forall con con' a. Sat (con &+& con') a |- (Sat con a :* Sat con' a)
- joinCon :: forall con con' a. (Sat con a :* Sat con' a) |- Sat (con &+& con') a
- inForkCon :: ((Sat con1 a :* Sat con2 a) |- (Sat con1' b :* Sat con2' b)) -> Sat (con1 &+& con2) a |- Sat (con1' &+& con2') b
- type Yes1' = Sat Yes1
- type Ok' k = Sat (Ok k)
- type OpSat op kon = OpCon op (Sat kon)
- inSat :: OpCon op (Sat con) => (Sat con a && Sat con b) |- Sat con (a `op` b)
- inOpL :: OpCon op con => ((con a && con b) && con c) |- con ((a `op` b) `op` c)
- inOpR :: OpCon op con => (con a && (con b && con c)) |- con (a `op` (b `op` c))
- inOpL' :: OpCon op con => ((con a && con b) && con c) |- (con (a `op` b) && con ((a `op` b) `op` c))
- inOpR' :: OpCon op con => (con a && (con b && con c)) |- (con (a `op` (b `op` c)) && con (b `op` c))
- inOpLR :: forall op con a b c. OpCon op con => (((con a && con b) && con c) && (con a && (con b && con c))) |- (con ((a `op` b) `op` c) && con (a `op` (b `op` c)))
- class OkAdd k where
- type Ok2 k a b = C2 (Ok k) a b
- type Ok3 k a b c = C3 (Ok k) a b c
- type Ok4 k a b c d = C4 (Ok k) a b c d
- type Ok5 k a b c d e = C5 (Ok k) a b c d e
- type Ok6 k a b c d e f = C6 (Ok k) a b c d e f
- type Oks k as = AllC (Ok k) as
- class Show2 k where
- class Category k where
- (<~) :: (Category k, Oks k [a, b, a', b']) => (b `k` b') -> (a' `k` a) -> (a `k` b) -> a' `k` b'
- (~>) :: (Category k, Oks k [a, b, a', b']) => (a' `k` a) -> (b `k` b') -> (a `k` b) -> a' `k` b'
- type Prod k = (:*)
- type OkProd k = OpCon (Prod k) (Ok' k)
- okProd :: forall k a b. OkProd k => (Ok' k a && Ok' k b) |- Ok' k (Prod k a b)
- class (Category k, OkProd k) => AssociativePCat k where
- class (Category k, OkProd k) => MonoidalPCat k where
- class (Category k, OkProd k) => BraidedPCat k where
- type MBraidedPCat k = (BraidedPCat k, MonoidalPCat k)
- class (Category k, OkProd k) => ProductCat k where
- (&&&) :: forall k a c d. (MProductCat k, Ok3 k a c d) => (a `k` c) -> (a `k` d) -> a `k` Prod k c d
- type MProductCat k = (ProductCat k, MonoidalPCat k)
- type Coprod k = (:+)
- type OkCoprod k = OpCon (Coprod k) (Ok' k)
- okCoprod :: forall k a b. OkCoprod k => (Ok' k a && Ok' k b) |- Ok' k (Coprod k a b)
- class (Category k, OkCoprod k) => AssociativeSCat k where
- class (Category k, OkCoprod k) => BraidedSCat k where
- class (OkCoprod k, Category k) => MonoidalSCat k where
- class (Category k, OkCoprod k) => CoproductCat k where
- type MCoproductCat k = (CoproductCat k, MonoidalSCat k)
- (|||) :: forall k a c d. (MCoproductCat k, Ok3 k a c d) => (c `k` a) -> (d `k` a) -> Coprod k c d `k` a
- type AbelianCat k = (MProductCat k, CoproductPCat k, TerminalCat k, CoterminalCat k, OkAdd k)
- zeroC :: (AbelianCat k, Ok2 k a b) => a `k` b
- plusC :: forall k a b. (AbelianCat k, Ok2 k a b) => Binop (a `k` b)
- type CoprodP k = Prod k
- type OkCoprodP k = OkProd k
- okCoprodP :: forall k a b. OkCoprodP k => (Ok' k a && Ok' k b) |- Ok' k (CoprodP k a b)
- class BraidedPCat k => CoproductPCat k where
- type MCoproductPCat k = (CoproductPCat k, MonoidalPCat k)
- (||||) :: forall k a c d. (MCoproductPCat k, Ok3 k a c d) => (c `k` a) -> (d `k` a) -> CoprodP k c d `k` a
- class ScalarCat k a where
- scale :: a -> a `k` a
- type LinearCat k a = (MProductCat k, CoproductPCat k, ScalarCat k a, Ok k a)
- class DistribCat k where
- type OkExp k = OpCon (Exp k) (Ok' k)
- okExp :: forall k a b. OkExp k => (Ok' k a && Ok' k b) |- Ok' k (Exp k a b)
- type Exp k = (->)
- class (OkExp k, ProductCat k) => ClosedCat k where
- applyK :: Kleisli m (Kleisli m a b :* a) b
- curryK :: Monad m => Kleisli m (a :* b) c -> Kleisli m a (Kleisli m b c)
- uncurryK :: Monad m => Kleisli m a (Kleisli m b c) -> Kleisli m (a :* b) c
- class OkExp k => FlipCat k where
- type Unit k = ()
- type OkUnit k = Ok k (Unit k)
- class OkUnit k => TerminalCat k where
- class OkUnit k => UnitCat k where
- type Counit k = ()
- class Ok k (Counit k) => CoterminalCat k where
- constFun :: forall k p a b. (ClosedCat k, Ok3 k p a b) => (a `k` b) -> p `k` Exp k a b
- constFun2 :: forall k p a b c. (ClosedCat k, Oks k [p, a, b, c]) => (Prod k a b `k` c) -> p `k` Exp k a (Exp k b c)
- unitFun :: forall k a b. (ClosedCat k, TerminalCat k, Ok2 k a b) => (a `k` b) -> Unit k `k` Exp k a b
- unUnitFun :: forall k p a. (ClosedCat k, MonoidalPCat k, TerminalCat k, Oks k [p, a]) => (Unit k `k` Exp k p a) -> p `k` a
- type ConstObj k b = b
- class (Category k, Ok k (ConstObj k b)) => ConstCat k b where
- repConst :: (HasRep b, r ~ Rep b, RepCat k b (ConstObj k r), ConstCat k r, Ok k a, Ok k (ConstObj k b)) => b -> a `k` ConstObj k b
- pairConst :: (MProductCat k, ConstCat k b, ConstCat k c, Ok k a) => (b :* c) -> a `k` (b :* c)
- lconst :: forall k a b. (MProductCat k, ConstCat k a, Ok2 k a b) => a -> b `k` (a :* b)
- rconst :: forall k a b. (MProductCat k, ConstCat k b, Ok2 k a b) => b -> a `k` (a :* b)
- class DelayCat k where
- class ProductCat k => LoopCat k where
- class ProductCat k => TracedCat k where
- type BiCCC k = (ClosedCat k, CoproductCat k, TerminalCat k, DistribCat k)
- data Constrained (con :: Type -> Constraint) k a b = Constrained (a `k` b)
- type BoolOf k = Bool
- class (ProductCat k, Ok k (BoolOf k)) => BoolCat k where
- okTT :: forall k a. OkProd k => Ok' k a |- Ok' k (Prod k a a)
- class (BoolCat k, Ok k a) => EqCat k a where
- class (EqCat k a, Ord a) => OrdCat k a where
- lessThan, greaterThan, lessThanOrEqual, greaterThanOrEqual :: Prod k a a `k` BoolOf k
- class Ok k a => MinMaxCat k a where
- class (Category k, Ok k a) => EnumCat k a where
- class Ok k a => NumCat k a where
- class Ok k a => IntegralCat k a where
- divModC :: forall k a. (MProductCat k, IntegralCat k a, Ok k a) => Prod k a a `k` Prod k a a
- class Ok k a => FractionalCat k a where
- class Ok k a => FloatingCat k a where
- class Ok k a => RealFracCat k a b where
- class FromIntegralCat k a b where
- fromIntegralC :: a `k` b
- foo_FromIntegralCat :: ()
- class BottomCat k a b where
- bottomC :: a `k` b
- type IfT k a = Prod k (BoolOf k) (Prod k a a) `k` a
- class (BoolCat k, Ok k a) => IfCat k a where
- class UnknownCat k a b where
- unknownC :: a `k` b
- class RepCat k a r where
- class TransitiveCon con where
- class CoerceCat k a b where
- coerceC :: a `k` b
- class OkFunctor k h where
- class OkFunctor k h => FunctorCat k h where
- class (Zip h, OkFunctor k h) => ZipCat k h where
- class OkFunctor k h => ZapCat k h where
- class (OkFunctor k h, Ok k a) => PointedCat k h a where
- pointC :: a `k` h a
- class Ok k a => AddCat k h a where
- sumAC :: h a `k` a
- class TraversableCat k t f where
- sequenceAC :: Ok k a => t (f a) `k` f (t a)
- class DistributiveCat k g f where
- distributeC :: Ok k a => f (g a) `k` g (f a)
- class RepresentableCat k f where
- fmap' :: Functor f => (a -> b) -> f a -> f b
- liftA2' :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
- zipWith' :: Zip f => (a -> b -> c) -> f a -> f b -> f c
- class FunctorCat k h => Strong k h where
- class OkIxProd k h where
- class (Category k, OkIxProd k h) => IxMonoidalPCat k h where
- class IxMonoidalPCat k h => IxProductCat k h where
- class (OkFunctor k h, Ok k a) => MinMaxFunctorCat k h a where
- class (OkFunctor k h, Ok k a) => MinMaxFFunctorCat k h a where
- class Additive1 h where
- class (IxMonoidalPCat k h, OkIxProd k h) => IxCoproductPCat k h where
- class FiniteCat k where
Documentation
Instances
data (p :**: q) a b infixr 7 Source #
Product for binary type constructors
(p a b) :**: (q a b) infixr 7 |
Instances
newtype Monoid2 m a b Source #
Monoid2 m |
type Con a :: Constraint Source #
Instances
OpCon (op :: k -> k -> k) (Yes1' :: k -> Type) Source # | |
OpCon (:*) (Sat Additive) Source # | |
OpCon (:*) (Sat HasCon) Source # | |
OpCon (:*) (Sat Eq) Source # | |
OpCon (:*) (Sat Ord) Source # | |
OpCon (:+) (Sat Eq) Source # | |
OpCon (:+) (Sat Ord) Source # | |
Typeable op => OpCon (op :: k -> k -> k) (Sat (Typeable :: k -> Constraint) :: k -> Type) Source # | |
(OpSat op con, OpSat op con') => OpCon (op :: k -> k -> k) (Sat (con &+& con') :: k -> Type) Source # | |
OpCon (->) (Sat Additive) Source # | |
HasCon (Sat kon a) Source # | |
type Con (Sat kon a) Source # | |
Defined in ConCat.Category |
class OpCon op con where Source #
Instances
OpCon (op :: k -> k -> k) (Yes1' :: k -> Type) Source # | |
OpCon (:*) (Sat Additive) Source # | |
OpCon (:*) (Sat HasCon) Source # | |
OpCon (:*) (Sat Eq) Source # | |
OpCon (:*) (Sat Ord) Source # | |
OpCon (:+) (Sat Eq) Source # | |
OpCon (:+) (Sat Ord) Source # | |
Typeable op => OpCon (op :: k -> k -> k) (Sat (Typeable :: k -> Constraint) :: k -> Type) Source # | |
(OpSat op con, OpSat op con') => OpCon (op :: k -> k -> k) (Sat (con &+& con') :: k -> Type) Source # | |
OpCon (->) (Sat Additive) Source # | |
inForkCon :: ((Sat con1 a :* Sat con2 a) |- (Sat con1' b :* Sat con2' b)) -> Sat (con1 &+& con2) a |- Sat (con1' &+& con2') b Source #
inOpL' :: OpCon op con => ((con a && con b) && con c) |- (con (a `op` b) && con ((a `op` b) `op` c)) Source #
inOpR' :: OpCon op con => (con a && (con b && con c)) |- (con (a `op` (b `op` c)) && con (b `op` c)) Source #
inOpLR :: forall op con a b c. OpCon op con => (((con a && con b) && con c) && (con a && (con b && con c))) |- (con ((a `op` b) `op` c) && con (a `op` (b `op` c))) Source #
class Category k where Source #
id :: Ok k a => a `k` a Source #
(.) :: forall b c a. Ok3 k a b c => (b `k` c) -> (a `k` b) -> a `k` c infixr 9 Source #
Instances
Category (|-) Source # | |
Monad m => Category (Kleisli m) Source # | |
Category (Coercion :: Type -> Type -> Type) Source # | |
Category ((:~:) :: Type -> Type -> Type) Source # | |
Category (U2 :: Type -> Type -> Type) Source # | |
Category (->) Source # | |
Monoid m => Category (Monoid2 m :: Type -> Type -> Type) Source # | |
(Category k, Category k') => Category (k :**: k') Source # | |
Category k => Category (Constrained con k) Source # | |
Defined in ConCat.Category type Ok (Constrained con k) :: Type -> Constraint Source # id :: Ok (Constrained con k) a => Constrained con k a a Source # (.) :: forall b c a. Ok3 (Constrained con k) a b c => Constrained con k b c -> Constrained con k a b -> Constrained con k a c Source # |
(<~) :: (Category k, Oks k [a, b, a', b']) => (b `k` b') -> (a' `k` a) -> (a `k` b) -> a' `k` b' infixl 1 Source #
Add post- and pre-processing
(~>) :: (Category k, Oks k [a, b, a', b']) => (a' `k` a) -> (b `k` b') -> (a `k` b) -> a' `k` b' infixr 1 Source #
Add pre- and post-processing
class (Category k, OkProd k) => AssociativePCat k where Source #
Nothing
lassocP :: forall a b c. Ok3 k a b c => Prod k a (Prod k b c) `k` Prod k (Prod k a b) c Source #
default lassocP :: forall a b c. (MProductCat k, Ok3 k a b c) => Prod k a (Prod k b c) `k` Prod k (Prod k a b) c Source #
rassocP :: forall a b c. Ok3 k a b c => Prod k (Prod k a b) c `k` Prod k a (Prod k b c) Source #
Instances
AssociativePCat (|-) Source # | |
AssociativePCat (->) Source # | |
(AssociativePCat k, AssociativePCat k') => AssociativePCat (k :**: k') Source # | |
Defined in ConCat.Category | |
(AssociativePCat k, OpSat (Prod k) con) => AssociativePCat (Constrained con k) Source # | |
Defined in ConCat.Category lassocP :: Ok3 (Constrained con k) a b c => Constrained con k (Prod (Constrained con k) a (Prod (Constrained con k) b c)) (Prod (Constrained con k) (Prod (Constrained con k) a b) c) Source # rassocP :: Ok3 (Constrained con k) a b c => Constrained con k (Prod (Constrained con k) (Prod (Constrained con k) a b) c) (Prod (Constrained con k) a (Prod (Constrained con k) b c)) Source # |
class (Category k, OkProd k) => MonoidalPCat k where Source #
Category with monoidal product.
(***) :: forall a b c d. Ok4 k a b c d => (a `k` c) -> (b `k` d) -> Prod k a b `k` Prod k c d infixr 3 Source #
first :: forall a a' b. Ok3 k a b a' => (a `k` a') -> Prod k a b `k` Prod k a' b Source #
second :: forall a b b'. Ok3 k a b b' => (b `k` b') -> Prod k a b `k` Prod k a b' Source #
Instances
MonoidalPCat (|-) Source # | |
Monad m => MonoidalPCat (Kleisli m) Source # | |
Defined in ConCat.Category (***) :: Ok4 (Kleisli m) a b c d => Kleisli m a c -> Kleisli m b d -> Kleisli m (Prod (Kleisli m) a b) (Prod (Kleisli m) c d) Source # first :: forall a a' b. Ok3 (Kleisli m) a b a' => Kleisli m a a' -> Kleisli m (Prod (Kleisli m) a b) (Prod (Kleisli m) a' b) Source # second :: Ok3 (Kleisli m) a b b' => Kleisli m b b' -> Kleisli m (Prod (Kleisli m) a b) (Prod (Kleisli m) a b') Source # | |
MonoidalPCat (U2 :: Type -> Type -> Type) Source # | |
MonoidalPCat (->) Source # | |
(MonoidalPCat k, MonoidalPCat k') => MonoidalPCat (k :**: k') Source # | |
Defined in ConCat.Category (***) :: Ok4 (k :**: k') a b c d => (k :**: k') a c -> (k :**: k') b d -> (k :**: k') (Prod (k :**: k') a b) (Prod (k :**: k') c d) Source # first :: forall a a' b. Ok3 (k :**: k') a b a' => (k :**: k') a a' -> (k :**: k') (Prod (k :**: k') a b) (Prod (k :**: k') a' b) Source # second :: Ok3 (k :**: k') a b b' => (k :**: k') b b' -> (k :**: k') (Prod (k :**: k') a b) (Prod (k :**: k') a b') Source # | |
(MonoidalPCat k, OpSat (Prod k) con) => MonoidalPCat (Constrained con k) Source # | |
Defined in ConCat.Category (***) :: Ok4 (Constrained con k) a b c d => Constrained con k a c -> Constrained con k b d -> Constrained con k (Prod (Constrained con k) a b) (Prod (Constrained con k) c d) Source # first :: forall a a' b. Ok3 (Constrained con k) a b a' => Constrained con k a a' -> Constrained con k (Prod (Constrained con k) a b) (Prod (Constrained con k) a' b) Source # second :: Ok3 (Constrained con k) a b b' => Constrained con k b b' -> Constrained con k (Prod (Constrained con k) a b) (Prod (Constrained con k) a b') Source # |
class (Category k, OkProd k) => BraidedPCat k where Source #
Braided monoidal category
Nothing
swapP :: forall a b. Ok2 k a b => Prod k a b `k` Prod k b a Source #
default swapP :: forall a b. (ProductCat k, MonoidalPCat k, Ok2 k a b) => Prod k a b `k` Prod k b a Source #
Instances
BraidedPCat (|-) Source # | |
Monad m => BraidedPCat (Kleisli m) Source # | |
BraidedPCat (U2 :: Type -> Type -> Type) Source # | |
BraidedPCat (->) Source # | |
(BraidedPCat k, BraidedPCat k') => BraidedPCat (k :**: k') Source # | |
(BraidedPCat k, OpSat (Prod k) con) => BraidedPCat (Constrained con k) Source # | |
Defined in ConCat.Category swapP :: Ok2 (Constrained con k) a b => Constrained con k (Prod (Constrained con k) a b) (Prod (Constrained con k) b a) Source # |
type MBraidedPCat k = (BraidedPCat k, MonoidalPCat k) Source #
class (Category k, OkProd k) => ProductCat k where Source #
Category with product.
Instances
ProductCat (|-) Source # | |
Monad m => ProductCat (Kleisli m) Source # | |
ProductCat (U2 :: Type -> Type -> Type) Source # | |
ProductCat (->) Source # | |
(ProductCat k, ProductCat k') => ProductCat (k :**: k') Source # | |
(ProductCat k, OpSat (Prod k) con) => ProductCat (Constrained con k) Source # | |
Defined in ConCat.Category exl :: Ok2 (Constrained con k) a b => Constrained con k (Prod (Constrained con k) a b) a Source # exr :: Ok2 (Constrained con k) a b => Constrained con k (Prod (Constrained con k) a b) b Source # dup :: Ok (Constrained con k) a => Constrained con k a (Prod (Constrained con k) a a) Source # |
(&&&) :: forall k a c d. (MProductCat k, Ok3 k a c d) => (a `k` c) -> (a `k` d) -> a `k` Prod k c d infixr 3 Source #
type MProductCat k = (ProductCat k, MonoidalPCat k) Source #
class (Category k, OkCoprod k) => AssociativeSCat k where Source #
Nothing
lassocS :: forall a b c. Oks k [a, b, c] => Coprod k a (Coprod k b c) `k` Coprod k (Coprod k a b) c Source #
default lassocS :: forall a b c. (MCoproductCat k, Oks k [a, b, c]) => Coprod k a (Coprod k b c) `k` Coprod k (Coprod k a b) c Source #
rassocS :: forall a b c. Oks k [a, b, c] => Coprod k (Coprod k a b) c `k` Coprod k a (Coprod k b c) Source #
Instances
AssociativeSCat (->) Source # | |
(AssociativeSCat k, AssociativeSCat k') => AssociativeSCat (k :**: k') Source # | |
Defined in ConCat.Category lassocS :: Oks (k :**: k') '[a, b, c] => (k :**: k') (Coprod (k :**: k') a (Coprod (k :**: k') b c)) (Coprod (k :**: k') (Coprod (k :**: k') a b) c) Source # rassocS :: Oks (k :**: k') '[a, b, c] => (k :**: k') (Coprod (k :**: k') (Coprod (k :**: k') a b) c) (Coprod (k :**: k') a (Coprod (k :**: k') b c)) Source # | |
(AssociativeSCat k, OpSat (Coprod k) con) => AssociativeSCat (Constrained con k) Source # | |
Defined in ConCat.Category lassocS :: Oks (Constrained con k) '[a, b, c] => Constrained con k (Coprod (Constrained con k) a (Coprod (Constrained con k) b c)) (Coprod (Constrained con k) (Coprod (Constrained con k) a b) c) Source # rassocS :: Oks (Constrained con k) '[a, b, c] => Constrained con k (Coprod (Constrained con k) (Coprod (Constrained con k) a b) c) (Coprod (Constrained con k) a (Coprod (Constrained con k) b c)) Source # |
class (Category k, OkCoprod k) => BraidedSCat k where Source #
Nothing
Instances
Monad m => BraidedSCat (Kleisli m) Source # | |
BraidedSCat (U2 :: Type -> Type -> Type) Source # | |
BraidedSCat (->) Source # | |
(BraidedSCat k, BraidedSCat k') => BraidedSCat (k :**: k') Source # | |
(BraidedSCat k, OpSat (Coprod k) con) => BraidedSCat (Constrained con k) Source # | |
Defined in ConCat.Category swapS :: Ok2 (Constrained con k) a b => Constrained con k (Coprod (Constrained con k) a b) (Coprod (Constrained con k) b a) Source # |
class (OkCoprod k, Category k) => MonoidalSCat k where Source #
(+++) :: forall a b c d. Ok4 k a b c d => (c `k` a) -> (d `k` b) -> Coprod k c d `k` Coprod k a b infixr 2 Source #
left :: forall a a' b. Oks k [a, b, a'] => (a `k` a') -> Coprod k a b `k` Coprod k a' b Source #
right :: forall a b b'. Oks k [a, b, b'] => (b `k` b') -> Coprod k a b `k` Coprod k a b' Source #
Instances
Monad m => MonoidalSCat (Kleisli m) Source # | |
Defined in ConCat.Category (+++) :: Ok4 (Kleisli m) a b c d => Kleisli m c a -> Kleisli m d b -> Kleisli m (Coprod (Kleisli m) c d) (Coprod (Kleisli m) a b) Source # left :: forall a a' b. Oks (Kleisli m) '[a, b, a'] => Kleisli m a a' -> Kleisli m (Coprod (Kleisli m) a b) (Coprod (Kleisli m) a' b) Source # right :: Oks (Kleisli m) '[a, b, b'] => Kleisli m b b' -> Kleisli m (Coprod (Kleisli m) a b) (Coprod (Kleisli m) a b') Source # | |
MonoidalSCat (U2 :: Type -> Type -> Type) Source # | |
Defined in ConCat.Category | |
MonoidalSCat (->) Source # | |
Defined in ConCat.Category | |
(MonoidalSCat k, MonoidalSCat k') => MonoidalSCat (k :**: k') Source # | |
Defined in ConCat.Category (+++) :: Ok4 (k :**: k') a b c d => (k :**: k') c a -> (k :**: k') d b -> (k :**: k') (Coprod (k :**: k') c d) (Coprod (k :**: k') a b) Source # left :: forall a a' b. Oks (k :**: k') '[a, b, a'] => (k :**: k') a a' -> (k :**: k') (Coprod (k :**: k') a b) (Coprod (k :**: k') a' b) Source # right :: Oks (k :**: k') '[a, b, b'] => (k :**: k') b b' -> (k :**: k') (Coprod (k :**: k') a b) (Coprod (k :**: k') a b') Source # | |
(MonoidalSCat k, OpSat (Coprod k) con) => MonoidalSCat (Constrained con k) Source # | |
Defined in ConCat.Category (+++) :: Ok4 (Constrained con k) a b c d => Constrained con k c a -> Constrained con k d b -> Constrained con k (Coprod (Constrained con k) c d) (Coprod (Constrained con k) a b) Source # left :: forall a a' b. Oks (Constrained con k) '[a, b, a'] => Constrained con k a a' -> Constrained con k (Coprod (Constrained con k) a b) (Coprod (Constrained con k) a' b) Source # right :: Oks (Constrained con k) '[a, b, b'] => Constrained con k b b' -> Constrained con k (Coprod (Constrained con k) a b) (Coprod (Constrained con k) a b') Source # |
class (Category k, OkCoprod k) => CoproductCat k where Source #
Category with coproduct.
Instances
Monad m => CoproductCat (Kleisli m) Source # | |
CoproductCat (U2 :: Type -> Type -> Type) Source # | |
CoproductCat (->) Source # | |
(CoproductCat k, CoproductCat k') => CoproductCat (k :**: k') Source # | |
(CoproductCat k, OpSat (Coprod k) con) => CoproductCat (Constrained con k) Source # | |
Defined in ConCat.Category inl :: Ok2 (Constrained con k) a b => Constrained con k a (Coprod (Constrained con k) a b) Source # inr :: Ok2 (Constrained con k) a b => Constrained con k b (Coprod (Constrained con k) a b) Source # jam :: Ok (Constrained con k) a => Constrained con k (Coprod (Constrained con k) a a) a Source # |
type MCoproductCat k = (CoproductCat k, MonoidalSCat k) Source #
(|||) :: forall k a c d. (MCoproductCat k, Ok3 k a c d) => (c `k` a) -> (d `k` a) -> Coprod k c d `k` a infixr 2 Source #
type AbelianCat k = (MProductCat k, CoproductPCat k, TerminalCat k, CoterminalCat k, OkAdd k) Source #
zeroC :: (AbelianCat k, Ok2 k a b) => a `k` b Source #
class BraidedPCat k => CoproductPCat k where Source #
Category with coproduct as Cartesian product.
Instances
CoproductPCat (U2 :: Type -> Type -> Type) Source # | |
(CoproductPCat k, CoproductPCat k') => CoproductPCat (k :**: k') Source # | |
type MCoproductPCat k = (CoproductPCat k, MonoidalPCat k) Source #
(||||) :: forall k a c d. (MCoproductPCat k, Ok3 k a c d) => (c `k` a) -> (d `k` a) -> CoprodP k c d `k` a infixr 2 Source #
type LinearCat k a = (MProductCat k, CoproductPCat k, ScalarCat k a, Ok k a) Source #
class DistribCat k where Source #
distl :: forall a u v. Ok3 k a u v => Prod k a (Coprod k u v) `k` Coprod k (Prod k a u) (Prod k a v) Source #
default distl :: forall a u v. (MonoidalSCat k, BraidedPCat k, Ok3 k a u v) => Prod k a (Coprod k u v) `k` Coprod k (Prod k a u) (Prod k a v) Source #
distr :: forall u v b. Ok3 k u v b => Prod k (Coprod k u v) b `k` Coprod k (Prod k u b) (Prod k v b) Source #
Instances
DistribCat (U2 :: Type -> Type -> Type) Source # | |
DistribCat (->) Source # | |
(DistribCat k, DistribCat k') => DistribCat (k :**: k') Source # | |
Defined in ConCat.Category distl :: Ok3 (k :**: k') a u v => (k :**: k') (Prod (k :**: k') a (Coprod (k :**: k') u v)) (Coprod (k :**: k') (Prod (k :**: k') a u) (Prod (k :**: k') a v)) Source # distr :: Ok3 (k :**: k') u v b => (k :**: k') (Prod (k :**: k') (Coprod (k :**: k') u v) b) (Coprod (k :**: k') (Prod (k :**: k') u b) (Prod (k :**: k') v b)) Source # |
class (OkExp k, ProductCat k) => ClosedCat k where Source #
apply :: forall a b. Ok2 k a b => Prod k (Exp k a b) a `k` b Source #
curry :: Ok3 k a b c => (Prod k a b `k` c) -> a `k` Exp k b c Source #
uncurry :: forall a b c. Ok3 k a b c => (a `k` Exp k b c) -> Prod k a b `k` c Source #
Instances
ClosedCat (U2 :: Type -> Type -> Type) Source # | |
ClosedCat (->) Source # | |
(ClosedCat k, ClosedCat k') => ClosedCat (k :**: k') Source # | |
Defined in ConCat.Category apply :: Ok2 (k :**: k') a b => (k :**: k') (Prod (k :**: k') (Exp (k :**: k') a b) a) b Source # curry :: Ok3 (k :**: k') a b c => (k :**: k') (Prod (k :**: k') a b) c -> (k :**: k') a (Exp (k :**: k') b c) Source # uncurry :: Ok3 (k :**: k') a b c => (k :**: k') a (Exp (k :**: k') b c) -> (k :**: k') (Prod (k :**: k') a b) c Source # | |
(ClosedCat k, OpSat (Prod k) con, OpSat (Exp k) con) => ClosedCat (Constrained con k) Source # | |
Defined in ConCat.Category apply :: Ok2 (Constrained con k) a b => Constrained con k (Prod (Constrained con k) (Exp (Constrained con k) a b) a) b Source # curry :: Ok3 (Constrained con k) a b c => Constrained con k (Prod (Constrained con k) a b) c -> Constrained con k a (Exp (Constrained con k) b c) Source # uncurry :: Ok3 (Constrained con k) a b c => Constrained con k a (Exp (Constrained con k) b c) -> Constrained con k (Prod (Constrained con k) a b) c Source # |
class OkExp k => FlipCat k where Source #
flipC :: Ok3 k a b c => (a `k` (b -> c)) -> b -> a `k` c Source #
flipC' :: Ok3 k a b c => (b -> a `k` c) -> a `k` (b -> c) Source #
class OkUnit k => TerminalCat k where Source #
Nothing
Instances
Monad m => TerminalCat (Kleisli m) Source # | |
TerminalCat (U2 :: Type -> Type -> Type) Source # | |
TerminalCat (->) Source # | |
(TerminalCat k, TerminalCat k') => TerminalCat (k :**: k') Source # | |
class OkUnit k => UnitCat k where Source #
Nothing
lunit :: Ok k a => a `k` Prod k (Unit k) a Source #
default lunit :: (MProductCat k, TerminalCat k, Ok k a) => a `k` Prod k (Unit k) a Source #
lcounit :: Ok k a => Prod k (Unit k) a `k` a Source #
runit :: Ok k a => a `k` Prod k a (Unit k) Source #
default runit :: (MProductCat k, TerminalCat k, Ok k a) => a `k` Prod k a (Unit k) Source #
rcounit :: Ok k a => Prod k a (Unit k) `k` a Source #
default rcounit :: (ProductCat k, TerminalCat k, Ok k a) => Prod k a (Unit k) `k` a Source #
Instances
Monad m => UnitCat (Kleisli m) Source # | |
Defined in ConCat.Category lunit :: Ok (Kleisli m) a => Kleisli m a (Prod (Kleisli m) (Unit (Kleisli m)) a) Source # lcounit :: Ok (Kleisli m) a => Kleisli m (Prod (Kleisli m) (Unit (Kleisli m)) a) a Source # runit :: Ok (Kleisli m) a => Kleisli m a (Prod (Kleisli m) a (Unit (Kleisli m))) Source # rcounit :: Ok (Kleisli m) a => Kleisli m (Prod (Kleisli m) a (Unit (Kleisli m))) a Source # | |
UnitCat (U2 :: Type -> Type -> Type) Source # | |
UnitCat (->) Source # | |
(UnitCat k, UnitCat k') => UnitCat (k :**: k') Source # | |
Defined in ConCat.Category lunit :: Ok (k :**: k') a => (k :**: k') a (Prod (k :**: k') (Unit (k :**: k')) a) Source # lcounit :: Ok (k :**: k') a => (k :**: k') (Prod (k :**: k') (Unit (k :**: k')) a) a Source # runit :: Ok (k :**: k') a => (k :**: k') a (Prod (k :**: k') a (Unit (k :**: k'))) Source # rcounit :: Ok (k :**: k') a => (k :**: k') (Prod (k :**: k') a (Unit (k :**: k'))) a Source # |
class Ok k (Counit k) => CoterminalCat k where Source #
Instances
constFun2 :: forall k p a b c. (ClosedCat k, Oks k [p, a, b, c]) => (Prod k a b `k` c) -> p `k` Exp k a (Exp k b c) Source #
unitFun :: forall k a b. (ClosedCat k, TerminalCat k, Ok2 k a b) => (a `k` b) -> Unit k `k` Exp k a b Source #
unUnitFun :: forall k p a. (ClosedCat k, MonoidalPCat k, TerminalCat k, Oks k [p, a]) => (Unit k `k` Exp k p a) -> p `k` a Source #
class (Category k, Ok k (ConstObj k b)) => ConstCat k b where Source #
Nothing
const :: Ok k a => b -> a `k` ConstObj k b Source #
unitArrow :: OkUnit k => b -> Unit k `k` ConstObj k b Source #
Instances
(Monad m, ConstCat (->) b) => ConstCat (Kleisli m) b Source # | |
ConstCat (U2 :: Type -> Type -> Type) a Source # | |
ConstCat (->) b Source # | |
(ConstCat k a, ConstCat k' a) => ConstCat (k :**: k') a Source # | |
(ConstCat k b, con b) => ConstCat (Constrained con k) b Source # | |
Defined in ConCat.Category const :: Ok (Constrained con k) a => b -> Constrained con k a (ConstObj (Constrained con k) b) Source # unitArrow :: b -> Constrained con k (Unit (Constrained con k)) (ConstObj (Constrained con k) b) Source # |
repConst :: (HasRep b, r ~ Rep b, RepCat k b (ConstObj k r), ConstCat k r, Ok k a, Ok k (ConstObj k b)) => b -> a `k` ConstObj k b Source #
pairConst :: (MProductCat k, ConstCat k b, ConstCat k c, Ok k a) => (b :* c) -> a `k` (b :* c) Source #
lconst :: forall k a b. (MProductCat k, ConstCat k a, Ok2 k a b) => a -> b `k` (a :* b) Source #
Inject a constant on the left
rconst :: forall k a b. (MProductCat k, ConstCat k b, Ok2 k a b) => b -> a `k` (a :* b) Source #
Inject a constant on the right
class ProductCat k => LoopCat k where Source #
class ProductCat k => TracedCat k where Source #
Instances
MonadFix m => TracedCat (Kleisli m) Source # | |
TracedCat (U2 :: Type -> Type -> Type) Source # | |
TracedCat (->) Source # | |
(TracedCat k, TracedCat k') => TracedCat (k :**: k') Source # | |
(TracedCat k, OpSat (Prod k) con) => TracedCat (Constrained con k) Source # | |
Defined in ConCat.Category trace :: Ok3 (Constrained con k) a b c => Constrained con k (a :* c) (b :* c) -> Constrained con k a b Source # |
type BiCCC k = (ClosedCat k, CoproductCat k, TerminalCat k, DistribCat k) Source #
Bi-cartesion (cartesian & co-cartesian) closed categories. Also lumps in terminal and distributive, though should probably be moved out.
data Constrained (con :: Type -> Constraint) k a b Source #
Constrained (a `k` b) |
Instances
class (ProductCat k, Ok k (BoolOf k)) => BoolCat k where Source #
notC :: BoolOf k `k` BoolOf k Source #
andC :: Prod k (BoolOf k) (BoolOf k) `k` BoolOf k Source #
Instances
class (BoolCat k, Ok k a) => EqCat k a where Source #
Instances
(Monad m, Eq a) => EqCat (Kleisli m) a Source # | |
EqCat (U2 :: Type -> Type -> Type) a Source # | |
Eq a => EqCat (->) a Source # | |
(EqCat k a, EqCat k' a) => EqCat (k :**: k') a Source # | |
(EqCat k a, con a, con Bool, OpSat (Prod k) con) => EqCat (Constrained con k) a Source # | |
Defined in ConCat.Category equal :: Constrained con k (Prod (Constrained con k) a a) (BoolOf (Constrained con k)) Source # notEqual :: Constrained con k (Prod (Constrained con k) a a) (BoolOf (Constrained con k)) Source # |
class (EqCat k a, Ord a) => OrdCat k a where Source #
lessThan :: Prod k a a `k` BoolOf k Source #
greaterThan :: Prod k a a `k` BoolOf k Source #
default greaterThan :: BraidedPCat k => Prod k a a `k` BoolOf k Source #
lessThanOrEqual :: Prod k a a `k` BoolOf k Source #
greaterThanOrEqual :: Prod k a a `k` BoolOf k Source #
Instances
class (Category k, Ok k a) => EnumCat k a where Source #
Nothing
class Ok k a => NumCat k a where Source #
addC :: Prod k a a `k` a Source #
subC :: Prod k a a `k` a Source #
default subC :: MProductCat k => Prod k a a `k` a Source #
Instances
(Monad m, Num a) => NumCat (Kleisli m) a Source # | |
NumCat (U2 :: Type -> Type -> Type) a Source # | |
Num a => NumCat (->) a Source # | |
(NumCat k a, NumCat k' a) => NumCat (k :**: k') a Source # | |
(NumCat k a, con a) => NumCat (Constrained con k) a Source # | |
Defined in ConCat.Category negateC :: Constrained con k a a Source # addC :: Constrained con k (Prod (Constrained con k) a a) a Source # subC :: Constrained con k (Prod (Constrained con k) a a) a Source # mulC :: Constrained con k (Prod (Constrained con k) a a) a Source # powIC :: Constrained con k (Prod (Constrained con k) a Int) a Source # |
class Ok k a => IntegralCat k a where Source #
Instances
(Monad m, Integral a) => IntegralCat (Kleisli m) a Source # | |
IntegralCat (U2 :: Type -> Type -> Type) a Source # | |
Integral a => IntegralCat (->) a Source # | |
(IntegralCat k a, IntegralCat k' a) => IntegralCat (k :**: k') a Source # | |
(IntegralCat k a, con a) => IntegralCat (Constrained con k) a Source # | |
Defined in ConCat.Category divC :: Constrained con k (Prod (Constrained con k) a a) a Source # modC :: Constrained con k (Prod (Constrained con k) a a) a Source # |
divModC :: forall k a. (MProductCat k, IntegralCat k a, Ok k a) => Prod k a a `k` Prod k a a Source #
class Ok k a => FractionalCat k a where Source #
Instances
(Monad m, Fractional a) => FractionalCat (Kleisli m) a Source # | |
FractionalCat (U2 :: Type -> Type -> Type) a Source # | |
Fractional a => FractionalCat (->) a Source # | |
(FractionalCat k a, FractionalCat k' a) => FractionalCat (k :**: k') a Source # | |
(FractionalCat k a, con a) => FractionalCat (Constrained con k) a Source # | |
Defined in ConCat.Category recipC :: Constrained con k a a Source # divideC :: Constrained con k (Prod (Constrained con k) a a) a Source # |
class Ok k a => FloatingCat k a where Source #
Instances
(Monad m, Floating a) => FloatingCat (Kleisli m) a Source # | |
FloatingCat (U2 :: Type -> Type -> Type) a Source # | |
Floating a => FloatingCat (->) a Source # | |
(FloatingCat k a, FloatingCat k' a) => FloatingCat (k :**: k') a Source # | |
(FloatingCat k a, con a) => FloatingCat (Constrained con k) a Source # | |
Defined in ConCat.Category expC :: Constrained con k a a Source # logC :: Constrained con k a a Source # cosC :: Constrained con k a a Source # sinC :: Constrained con k a a Source # sqrtC :: Constrained con k a a Source # tanhC :: Constrained con k a a Source # |
class Ok k a => RealFracCat k a b where Source #
Instances
(Monad m, RealFrac a, Integral b) => RealFracCat (Kleisli m) a b Source # | |
Integral b => RealFracCat (U2 :: Type -> Type -> Type) a b Source # | |
(RealFrac a, Integral b) => RealFracCat (->) a b Source # | |
(RealFracCat k a b, RealFracCat k' a b) => RealFracCat (k :**: k') a b Source # | |
(RealFracCat k a b, con a, con b) => RealFracCat (Constrained con k) a b Source # | |
Defined in ConCat.Category floorC :: Constrained con k a b Source # ceilingC :: Constrained con k a b Source # truncateC :: Constrained con k a b Source # |
class FromIntegralCat k a b where Source #
fromIntegralC :: a `k` b Source #
foo_FromIntegralCat :: () Source #
Instances
class BottomCat k a b where Source #
Instances
(BottomCat k a b, ClosedCat k, Ok4 k z b a (z -> b)) => BottomCat (k :: Type -> Type -> Type) (a :: Type) (z -> b :: Type) Source # | |
Defined in ConCat.Category | |
BottomCat (->) (a :: Type) (b :: Type) Source # | |
Defined in ConCat.Category | |
BottomCat (U2 :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category | |
(BottomCat k a b, con a, con b) => BottomCat (Constrained con k :: Type -> Type -> Type) (a :: Type) (b :: Type) Source # | |
Defined in ConCat.Category bottomC :: Constrained con k a b Source # | |
(BottomCat k3 a b, BottomCat k' a b) => BottomCat (k3 :**: k' :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category |
class (BoolCat k, Ok k a) => IfCat k a where Source #
Instances
Monad m => IfCat (Kleisli m) a Source # | |
IfCat (U2 :: Type -> Type -> Type) a Source # | |
IfCat (->) a Source # | |
Defined in ConCat.Category | |
(IfCat k a, IfCat k' a) => IfCat (k :**: k') a Source # | |
(IfCat k a, OpCon (Prod k) (Sat con), con Bool, con a) => IfCat (Constrained con k) a Source # | |
Defined in ConCat.Category ifC :: IfT (Constrained con k) a Source # |
class UnknownCat k a b where Source #
Instances
UnknownCat (->) (a :: Type) (b :: Type) Source # | |
Defined in ConCat.Category | |
UnknownCat (U2 :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category | |
(UnknownCat k3 a b, UnknownCat k' a b) => UnknownCat (k3 :**: k' :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category |
class RepCat k a r where Source #
Instances
r ~ Rep a => RepCat (U2 :: Type -> Type -> Type) (a :: Type) (r :: Type) Source # | |
(HasRep a, r ~ Rep a) => RepCat (->) (a :: Type) (r :: Type) Source # | |
(RepCat k a r, con a, con r) => RepCat (Constrained con k :: Type -> Type -> Type) (a :: Type) (r :: Type) Source # | |
Defined in ConCat.Category reprC :: Constrained con k a r Source # abstC :: Constrained con k r a Source # | |
(RepCat k2 a b, RepCat k' a b) => RepCat (k2 :**: k' :: k1 -> k1 -> Type) (a :: k1) (b :: k1) Source # | |
class TransitiveCon con where Source #
Instances
TransitiveCon (Coercible :: k -> k -> Constraint) Source # | |
class CoerceCat k a b where Source #
Instances
Coercible a b => CoerceCat (->) (a :: Type) (b :: Type) Source # | |
Defined in ConCat.Category | |
CoerceCat (U2 :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category | |
(CoerceCat k a b, con a, con b) => CoerceCat (Constrained con k :: Type -> Type -> Type) (a :: Type) (b :: Type) Source # | |
Defined in ConCat.Category coerceC :: Constrained con k a b Source # | |
(CoerceCat k3 a b, CoerceCat k' a b) => CoerceCat (k3 :**: k' :: k1 -> k2 -> Type) (a :: k1) (b :: k2) Source # | |
Defined in ConCat.Category |
class OkFunctor k h => FunctorCat k h where Source #
fmapC :: Ok2 k a b => (a `k` b) -> h a `k` h b Source #
unzipC :: forall a b. Ok2 k a b => h (a :* b) `k` (h a :* h b) Source #
Instances
Functor h => FunctorCat (->) h Source # | |
(FunctorCat k h, FunctorCat k' h) => FunctorCat (k :**: k') h Source # | |
FunctorCat k f => FunctorCat (Constrained con k) f Source # | |
Defined in ConCat.Category fmapC :: Ok2 (Constrained con k) a b => Constrained con k a b -> Constrained con k (f a) (f b) Source # unzipC :: Ok2 (Constrained con k) a b => Constrained con k (f (a :* b)) (f a :* f b) Source # |
class (OkFunctor k h, Ok k a) => PointedCat k h a where Source #
Instances
Pointed h => PointedCat (->) h a Source # | |
Defined in ConCat.Category | |
(PointedCat k h a, PointedCat k' h a) => PointedCat (k :**: k') h a Source # | |
Defined in ConCat.Category | |
(Applicative m, con a) => PointedCat (Constrained con (->)) m a Source # | |
Defined in ConCat.Category pointC :: Constrained con (->) a (m a) Source # |
class TraversableCat k t f where Source #
sequenceAC :: Ok k a => t (f a) `k` f (t a) Source #
Instances
(Traversable t, Applicative f) => TraversableCat (->) t f Source # | |
Defined in ConCat.Category sequenceAC :: Ok (->) a => t (f a) -> f (t a) Source # | |
(TraversableCat k t f, TraversableCat k' t f) => TraversableCat (k :**: k') t f Source # | |
Defined in ConCat.Category |
class DistributiveCat k g f where Source #
distributeC :: Ok k a => f (g a) `k` g (f a) Source #
Instances
(Distributive g, Functor f) => DistributiveCat (->) g f Source # | |
Defined in ConCat.Category distributeC :: Ok (->) a => f (g a) -> g (f a) Source # | |
(DistributiveCat k g f, DistributiveCat k' g f) => DistributiveCat (k :**: k') g f Source # | |
Defined in ConCat.Category |
class RepresentableCat k f where Source #
Instances
Representable f => RepresentableCat (->) f Source # | |
(RepresentableCat k h, RepresentableCat k' h) => RepresentableCat (k :**: k') h Source # | |
RepresentableCat k f => RepresentableCat (Constrained con k) f Source # | |
Defined in ConCat.Category tabulateC :: Ok (Constrained con k) a => Constrained con k (Rep f -> a) (f a) Source # indexC :: Ok (Constrained con k) a => Constrained con k (f a) (Rep f -> a) Source # |
liftA2' :: Applicative f => (a -> b -> c) -> f a -> f b -> f c Source #
class FunctorCat k h => Strong k h where Source #
Instances
class (Category k, OkIxProd k h) => IxMonoidalPCat k h where Source #
Instances
IxMonoidalPCat (U2 :: Type -> Type -> Type) h Source # | |
Zip h => IxMonoidalPCat (->) h Source # | |
Defined in ConCat.Category | |
(IxMonoidalPCat k h, IxMonoidalPCat k' h, Zip h) => IxMonoidalPCat (k :**: k') h Source # | |
class IxMonoidalPCat k h => IxProductCat k h where Source #
exF :: forall a. Ok k a => h (h a `k` a) Source #
forkF :: forall a b. Ok2 k a b => h (a `k` b) -> a `k` h b Source #
Instances
Pointed h => IxProductCat (U2 :: Type -> Type -> Type) h Source # | |
(Representable h, Zip h, Pointed h) => IxProductCat (->) h Source # | |
(IxProductCat k h, IxProductCat k' h, Zip h) => IxProductCat (k :**: k') h Source # | |
class (OkFunctor k h, Ok k a) => MinMaxFunctorCat k h a where Source #
Instances
MinMax h a => MinMaxFunctorCat (->) h a Source # | |
(MinMaxFunctorCat k h a, MinMaxFunctorCat k' h a) => MinMaxFunctorCat (k :**: k') h a Source # | |
class (OkFunctor k h, Ok k a) => MinMaxFFunctorCat k h a where Source #
Instances
MinMaxRep h a => MinMaxFFunctorCat (->) h a Source # | |
(MinMaxFFunctorCat k h a, MinMaxFFunctorCat k' h a, Ord a) => MinMaxFFunctorCat (k :**: k') h a Source # | |
class (IxMonoidalPCat k h, OkIxProd k h) => IxCoproductPCat k h where Source #
Indexed coproducts as indexed products.
inPF :: forall a. Ok k a => h (a `k` h a) Source #
joinPF :: forall a b. Ok2 k a b => h (b `k` a) -> h b `k` a Source #
default joinPF :: forall a b. (IxMonoidalPCat k h, Ok2 k a b) => h (b `k` a) -> h b `k` a Source #
Instances
Pointed h => IxCoproductPCat (U2 :: Type -> Type -> Type) h Source # | |
(IxCoproductPCat k h, IxCoproductPCat k' h, Zip h) => IxCoproductPCat (k :**: k') h Source # | |