Portability | non-portable (class-associated types) |
---|---|

Stability | experimental |

Maintainer | Edward Kmett <ekmett@gmail.com> |

- class (Cartesian <=, Symmetric <= (Product <=), Monoidal <= (Product <=)) => CCC (<=) where
- unitCCC :: CCC <= => a <= Exp <= b (Product <= b a)
- counitCCC :: CCC <= => Product <= b (Exp <= b a) <= a
- class (CoCartesian <=, Symmetric <= (Sum <=), Comonoidal <= (Sum <=)) => CoCCC (<=) where
- unitCoCCC :: CoCCC <= => a <= Sum <= b (Coexp <= b a)
- counitCoCCC :: (CoCCC <=, subtract ~ Coexp <=, + ~ Sum <=) => subtract b (b + a) <= a

# Cartesian Closed Category

class (Cartesian <=, Symmetric <= (Product <=), Monoidal <= (Product <=)) => CCC (<=) whereSource

A `CCC`

has full-fledged monoidal finite products and exponentials

# Co-(Cartesian Closed Category)

class (CoCartesian <=, Symmetric <= (Sum <=), Comonoidal <= (Sum <=)) => CoCCC (<=) whereSource

A Co-CCC has full-fledged comonoidal finite coproducts and coexponentials

counitCoCCC :: (CoCCC <=, subtract ~ Coexp <=, + ~ Sum <=) => subtract b (b + a) <= aSource