/usr/share/doc/libghc-categories-doc/html/Control-Category-Cartesian.html is in libghc-categories-doc 0.59-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Control.Category.Cartesian</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Control-Category-Cartesian.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Category-Cartesian.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">categories-0.59: categories from category-extras</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>non-portable (class-associated types)</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Safe Haskell</th><td>Safe-Infered</td></tr></table><p class="caption">Control.Category.Cartesian</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Pre-(Co)Cartesian categories
</a></li><li><a href="#g:2">(Co)Cartesian categories
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc empty"> </div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> (<a href="Control-Category-Associative.html#t:Associative">Associative</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Symmetric">Symmetric</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Braided">Braided</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k)) => <a href="#t:PreCartesian">PreCartesian</a> k <span class="keyword">where</span><ul class="subs"><li><span class="keyword">type</span> <a href="#t:Product">Product</a> k :: * -> * -> *</li><li><a href="#v:fst">fst</a> :: <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` a</li><li><a href="#v:snd">snd</a> :: <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` b</li><li><a href="#v:diag">diag</a> :: a `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a a</li><li><a href="#v:-38--38--38-">(&&&)</a> :: (a `k` b) -> (a `k` c) -> a `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c</li></ul></li><li class="src short"><a href="#v:bimapProduct">bimapProduct</a> :: (<a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k, <*> ~ <a href="Control-Category-Cartesian.html#t:Product">Product</a> k) => (a `k` c) -> (b `k` d) -> (a <*> b) `k` (c <*> d)</li><li class="src short"><a href="#v:braidProduct">braidProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k b a</li><li class="src short"><a href="#v:associateProduct">associateProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b) c `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c)</li><li class="src short"><a href="#v:disassociateProduct">disassociateProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c) `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b) c</li><li class="src short"><span class="keyword">class</span> (<a href="Control-Category-Associative.html#t:Associative">Associative</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Braided.html#t:Symmetric">Symmetric</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Braided">Braided</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k)) => <a href="#t:PreCoCartesian">PreCoCartesian</a> k <span class="keyword">where</span><ul class="subs"><li><span class="keyword">type</span> <a href="#t:Sum">Sum</a> k :: * -> * -> *</li><li><a href="#v:inl">inl</a> :: a `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b</li><li><a href="#v:inr">inr</a> :: b `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b</li><li><a href="#v:codiag">codiag</a> :: <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a a `k` a</li><li><a href="#v:-124--124--124-">(|||)</a> :: (a `k` c) -> (b `k` c) -> <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b `k` c</li></ul></li><li class="src short"><a href="#v:bimapSum">bimapSum</a> :: (<a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k, <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k ~ +) => (a `k` c) -> (b `k` d) -> (a + b) `k` (c + d)</li><li class="src short"><a href="#v:braidSum">braidSum</a> :: (<a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k, + ~ <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k) => (a + b) `k` (b + a)</li><li class="src short"><a href="#v:associateSum">associateSum</a> :: <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b) c `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k b c)</li><li class="src short"><a href="#v:disassociateSum">disassociateSum</a> :: <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k b c) `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b) c</li><li class="src short"><span class="keyword">class</span> (<a href="Control-Category-Monoidal.html#t:Monoidal">Monoidal</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k) => <a href="#t:Cartesian">Cartesian</a> k </li><li class="src short"><span class="keyword">class</span> (<a href="Control-Category-Monoidal.html#t:Comonoidal">Comonoidal</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k) => <a href="#t:CoCartesian">CoCartesian</a> k </li></ul></div><div id="interface"><h1 id="g:1">Pre-(Co)Cartesian categories
</h1><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Control-Category-Associative.html#t:Associative">Associative</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Symmetric">Symmetric</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Braided">Braided</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k)) => <a name="t:PreCartesian" class="def">PreCartesian</a> k <span class="keyword">where</span><a href="src/Control-Category-Cartesian.html#PreCartesian" class="link">Source</a></p><div class="doc"><p>NB: This is weaker than traditional category with products! That is Cartesian, below.
The problem is <code>(->)</code> lacks an initial object, since every type is inhabited in Haskell.
Consequently its coproduct is merely a semigroup, not a monoid (as it has no identity), and
since we want to be able to describe its dual category, which has this non-traditional
form being built over a category with an associative bifunctor rather than as a monoidal category
for the product monoid.
</p><p>Minimum definition:
</p><pre> fst, snd, diag
fst, snd, (&&&)
</pre></div><div class="subs associated-types"><p class="caption">Associated Types</p><p class="src"><span class="keyword">type</span> <a name="t:Product" class="def">Product</a> k :: * -> * -> *<a href="src/Control-Category-Cartesian.html#Product" class="link">Source</a></p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:fst" class="def">fst</a> :: <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` a<a href="src/Control-Category-Cartesian.html#fst" class="link">Source</a></p><p class="src"><a name="v:snd" class="def">snd</a> :: <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` b<a href="src/Control-Category-Cartesian.html#snd" class="link">Source</a></p><p class="src"><a name="v:diag" class="def">diag</a> :: a `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a a<a href="src/Control-Category-Cartesian.html#diag" class="link">Source</a></p><p class="src"><a name="v:-38--38--38-" class="def">(&&&)</a> :: (a `k` b) -> (a `k` c) -> a `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c<a href="src/Control-Category-Cartesian.html#%26%26%26" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:PreCartesian" class="caption collapser" onclick="toggleSection('i:PreCartesian')">Instances</p><div id="section.i:PreCartesian" class="show"><table><tr><td class="src"><a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> (->)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:bimapProduct" class="def">bimapProduct</a> :: (<a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k, <*> ~ <a href="Control-Category-Cartesian.html#t:Product">Product</a> k) => (a `k` c) -> (b `k` d) -> (a <*> b) `k` (c <*> d)<a href="src/Control-Category-Cartesian.html#bimapProduct" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> for the product <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Product k</code> if <code>(&&&)</code> is known
</p></div></div><div class="top"><p class="src"><a name="v:braidProduct" class="def">braidProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k b a<a href="src/Control-Category-Cartesian.html#braidProduct" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Braided.html#t:Braided">Braided</a></code> for the product <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Product k</code>
braidProduct :: (PreCartesian k, Product k ~ (<a href="*">*</a>)) => a <a href="*">*</a> b ~> b <a href="*">*</a> a
</p></div></div><div class="top"><p class="src"><a name="v:associateProduct" class="def">associateProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b) c `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c)<a href="src/Control-Category-Cartesian.html#associateProduct" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Associative.html#t:Associative">Associative</a></code> for the product <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Product k</code>
associateProduct :: (PreCartesian k, (<a href="*">*</a>) ~ Product k) => (a <a href="*">*</a> b) <a href="*">*</a> c ~> (a <a href="*">*</a> (b <a href="*">*</a> c))
</p></div></div><div class="top"><p class="src"><a name="v:disassociateProduct" class="def">disassociateProduct</a> :: <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Product">Product</a> k a (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k b c) `k` <a href="Control-Category-Cartesian.html#t:Product">Product</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k a b) c<a href="src/Control-Category-Cartesian.html#disassociateProduct" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a></code> for the product <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Product k</code>
disassociateProduct:: (PreCartesian k, (<a href="*">*</a>) ~ Product k) => a <a href="*">*</a> (b <a href="*">*</a> c) ~> (a <a href="*">*</a> b) <a href="*">*</a> c
</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Control-Category-Associative.html#t:Associative">Associative</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Braided.html#t:Symmetric">Symmetric</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Braided.html#t:Braided">Braided</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k)) => <a name="t:PreCoCartesian" class="def">PreCoCartesian</a> k <span class="keyword">where</span><a href="src/Control-Category-Cartesian.html#PreCoCartesian" class="link">Source</a></p><div class="subs associated-types"><p class="caption">Associated Types</p><p class="src"><span class="keyword">type</span> <a name="t:Sum" class="def">Sum</a> k :: * -> * -> *<a href="src/Control-Category-Cartesian.html#Sum" class="link">Source</a></p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:inl" class="def">inl</a> :: a `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b<a href="src/Control-Category-Cartesian.html#inl" class="link">Source</a></p><p class="src"><a name="v:inr" class="def">inr</a> :: b `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b<a href="src/Control-Category-Cartesian.html#inr" class="link">Source</a></p><p class="src"><a name="v:codiag" class="def">codiag</a> :: <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a a `k` a<a href="src/Control-Category-Cartesian.html#codiag" class="link">Source</a></p><p class="src"><a name="v:-124--124--124-" class="def">(|||)</a> :: (a `k` c) -> (b `k` c) -> <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b `k` c<a href="src/Control-Category-Cartesian.html#%7C%7C%7C" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:PreCoCartesian" class="caption collapser" onclick="toggleSection('i:PreCoCartesian')">Instances</p><div id="section.i:PreCoCartesian" class="show"><table><tr><td class="src"><a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> (->)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:bimapSum" class="def">bimapSum</a> :: (<a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k, <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k ~ +) => (a `k` c) -> (b `k` d) -> (a + b) `k` (c + d)<a href="src/Control-Category-Cartesian.html#bimapSum" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> for the coproduct <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Sum k</code> if <code>(|||)</code> is known
</p></div></div><div class="top"><p class="src"><a name="v:braidSum" class="def">braidSum</a> :: (<a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k, + ~ <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k) => (a + b) `k` (b + a)<a href="src/Control-Category-Cartesian.html#braidSum" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Braided.html#t:Braided">Braided</a></code> for the coproduct <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Sum k</code>
</p></div></div><div class="top"><p class="src"><a name="v:associateSum" class="def">associateSum</a> :: <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b) c `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k b c)<a href="src/Control-Category-Cartesian.html#associateSum" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Associative.html#t:Associative">Associative</a></code> for the coproduct <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Sum k</code>
associateSum :: (PreCoCartesian k, (+) ~ Sum k) => ((a + b) + c) ~> (a + (b + c))
</p></div></div><div class="top"><p class="src"><a name="v:disassociateSum" class="def">disassociateSum</a> :: <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k => <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k b c) `k` <a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k a b) c<a href="src/Control-Category-Cartesian.html#disassociateSum" class="link">Source</a></p><div class="doc"><p>free construction of <code><a href="Control-Category-Associative.html#t:Disassociative">Disassociative</a></code> for the coproduct <code><a href="Control-Categorical-Bifunctor.html#t:Bifunctor">Bifunctor</a></code> <code>Sum k</code>
disassociateSum :: (PreCoCartesian k, (+) ~ Sum k) => (a + (b + c)) ~> ((a + b) + c)
</p></div></div><h1 id="g:2">(Co)Cartesian categories
</h1><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Control-Category-Monoidal.html#t:Monoidal">Monoidal</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k) => <a name="t:Cartesian" class="def">Cartesian</a> k <a href="src/Control-Category-Cartesian.html#Cartesian" class="link">Source</a></p><div class="subs instances"><p id="control.i:Cartesian" class="caption collapser" onclick="toggleSection('i:Cartesian')">Instances</p><div id="section.i:Cartesian" class="show"><table><tr><td class="src">(<a href="Control-Category-Monoidal.html#t:Monoidal">Monoidal</a> k (<a href="Control-Category-Cartesian.html#t:Product">Product</a> k), <a href="Control-Category-Cartesian.html#t:PreCartesian">PreCartesian</a> k) => <a href="Control-Category-Cartesian.html#t:Cartesian">Cartesian</a> k</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Control-Category-Monoidal.html#t:Comonoidal">Comonoidal</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k) => <a name="t:CoCartesian" class="def">CoCartesian</a> k <a href="src/Control-Category-Cartesian.html#CoCartesian" class="link">Source</a></p><div class="subs instances"><p id="control.i:CoCartesian" class="caption collapser" onclick="toggleSection('i:CoCartesian')">Instances</p><div id="section.i:CoCartesian" class="show"><table><tr><td class="src">(<a href="Control-Category-Monoidal.html#t:Comonoidal">Comonoidal</a> k (<a href="Control-Category-Cartesian.html#t:Sum">Sum</a> k), <a href="Control-Category-Cartesian.html#t:PreCoCartesian">PreCoCartesian</a> k) => <a href="Control-Category-Cartesian.html#t:CoCartesian">CoCartesian</a> k</td><td class="doc empty"> </td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html>
|