<!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>Data.Boolean</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_Data-Boolean.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Data-Boolean.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">Boolean-0.0.1: Generalized booleans</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>conal@conal.net</td></tr></table><p class="caption">Data.Boolean</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Some classes for generalized boolean operations. </p><p>In this design, for if-then-else, equality and inequality tests, the boolean type depends functionally on the value type. This dependency allows the boolean type to be inferred in a conditional expression. </p><p>I also tried using a unary type constructor class. The class doesn't work for regular booleans, so generality is lost. Also, we'd probably have to wire class constraints in like: <code>(==*) :: Eq a => f Bool -> f a -> f a -> f a</code>, which disallows situations needing additional constraints, e.g., Show. </p></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="#t:Boolean">Boolean</a> b <span class="keyword">where</span><ul class="subs"><li><a href="#v:true">true</a> :: b</li><li><a href="#v:false">false</a> :: b</li><li><a href="#v:notB">notB</a> :: b -> b</li><li><a href="#v:-38--38--42-">(&&*)</a> :: b -> b -> b</li><li><a href="#v:-124--124--42-">(||*)</a> :: b -> b -> b</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a href="#t:IfB">IfB</a> bool a | a -> bool <span class="keyword">where</span><ul class="subs"><li><a href="#v:ifB">ifB</a> :: bool -> a -> a -> a</li></ul></li><li class="src short"><a href="#v:boolean">boolean</a> :: <a href="Data-Boolean.html#t:IfB">IfB</a> bool a => a -> a -> bool -> a</li><li class="src short"><a href="#v:cond">cond</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> f, <a href="Data-Boolean.html#t:IfB">IfB</a> bool a) => f bool -> f a -> f a -> f a</li><li class="src short"><a href="#v:crop">crop</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> f, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Monoid.html#t:Monoid">Monoid</a> (f a), <a href="Data-Boolean.html#t:IfB">IfB</a> bool a) => f bool -> f a -> f a</li><li class="src short"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a href="#t:EqB">EqB</a> bool a | a -> bool <span class="keyword">where</span><ul class="subs"><li><a href="#v:-61--61--42-">(==*)</a> :: a -> a -> bool</li><li><a href="#v:-47--61--42-">(/=*)</a> :: a -> a -> bool</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a href="#t:OrdB">OrdB</a> bool a | a -> bool <span class="keyword">where</span><ul class="subs"><li><a href="#v:-60--42-">(<*)</a> :: a -> a -> bool</li><li><a href="#v:-62--61--42-">(>=*)</a> :: a -> a -> bool</li><li><a href="#v:-62--42-">(>*)</a> :: a -> a -> bool</li><li><a href="#v:-60--61--42-">(<=*)</a> :: a -> a -> bool</li></ul></li><li class="src short"><a href="#v:minB">minB</a> :: (<a href="Data-Boolean.html#t:IfB">IfB</a> bool a, <a href="Data-Boolean.html#t:OrdB">OrdB</a> bool a) => a -> a -> a</li><li class="src short"><a href="#v:maxB">maxB</a> :: (<a href="Data-Boolean.html#t:IfB">IfB</a> bool a, <a href="Data-Boolean.html#t:OrdB">OrdB</a> bool a) => a -> a -> a</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:Boolean" class="def">Boolean</a> b <span class="keyword">where</span><a href="src/Data-Boolean.html#Boolean" class="link">Source</a></p><div class="doc"><p>Generalized boolean class </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:true" class="def">true</a> :: b<a href="src/Data-Boolean.html#true" class="link">Source</a></p><p class="src"><a name="v:false" class="def">false</a> :: b<a href="src/Data-Boolean.html#false" class="link">Source</a></p><p class="src"><a name="v:notB" class="def">notB</a> :: b -> b<a href="src/Data-Boolean.html#notB" class="link">Source</a></p><p class="src"><a name="v:-38--38--42-" class="def">(&&*)</a> :: b -> b -> b<a href="src/Data-Boolean.html#%26%26%2A" class="link">Source</a></p><p class="src"><a name="v:-124--124--42-" class="def">(||*)</a> :: b -> b -> b<a href="src/Data-Boolean.html#%7C%7C%2A" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:Boolean" class="caption collapser" onclick="toggleSection('i:Boolean')">Instances</p><div id="section.i:Boolean" class="show"><table><tr><td class="src"><a href="Data-Boolean.html#t:Boolean">Boolean</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a href="Data-Boolean.html#t:Boolean">Boolean</a> (z -> bool)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a name="t:IfB" class="def">IfB</a> bool a | a -> bool <span class="keyword">where</span><a href="src/Data-Boolean.html#IfB" class="link">Source</a></p><div class="doc"><p>Types with conditionals </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:ifB" class="def">ifB</a> :: bool -> a -> a -> a<a href="src/Data-Boolean.html#ifB" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:IfB" class="caption collapser" onclick="toggleSection('i:IfB')">Instances</p><div id="section.i:IfB" class="show"><table><tr><td class="src"><a href="Data-Boolean.html#t:IfB">IfB</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#t:Float">Float</a></td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Data-Boolean.html#t:IfB">IfB</a> bool p, <a href="Data-Boolean.html#t:IfB">IfB</a> bool q) => <a href="Data-Boolean.html#t:IfB">IfB</a> bool (p, q)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Data-Boolean.html#t:IfB">IfB</a> bool p, <a href="Data-Boolean.html#t:IfB">IfB</a> bool q, <a href="Data-Boolean.html#t:IfB">IfB</a> bool r) => <a href="Data-Boolean.html#t:IfB">IfB</a> bool (p, q, r)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Data-Boolean.html#t:IfB">IfB</a> bool p, <a href="Data-Boolean.html#t:IfB">IfB</a> bool q, <a href="Data-Boolean.html#t:IfB">IfB</a> bool r, <a href="Data-Boolean.html#t:IfB">IfB</a> bool s) => <a href="Data-Boolean.html#t:IfB">IfB</a> bool (p, q, r, s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Boolean.html#t:IfB">IfB</a> bool a => <a href="Data-Boolean.html#t:IfB">IfB</a> (z -> bool) (z -> a)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:boolean" class="def">boolean</a> :: <a href="Data-Boolean.html#t:IfB">IfB</a> bool a => a -> a -> bool -> a<a href="src/Data-Boolean.html#boolean" class="link">Source</a></p><div class="doc"><p>Expression-lifted conditional with condition last </p></div></div><div class="top"><p class="src"><a name="v:cond" class="def">cond</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> f, <a href="Data-Boolean.html#t:IfB">IfB</a> bool a) => f bool -> f a -> f a -> f a<a href="src/Data-Boolean.html#cond" class="link">Source</a></p><div class="doc"><p>Point-wise conditional </p></div></div><div class="top"><p class="src"><a name="v:crop" class="def">crop</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> f, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Monoid.html#t:Monoid">Monoid</a> (f a), <a href="Data-Boolean.html#t:IfB">IfB</a> bool a) => f bool -> f a -> f a<a href="src/Data-Boolean.html#crop" class="link">Source</a></p><div class="doc"><p>Crop a function, filling in <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Monoid.html#v:mempty">mempty</a></code> where the test yeis false. </p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a name="t:EqB" class="def">EqB</a> bool a | a -> bool <span class="keyword">where</span><a href="src/Data-Boolean.html#EqB" class="link">Source</a></p><div class="doc"><p>Types with equality. Minimum definition: '(==*)'. </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:-61--61--42-" class="def">(==*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%3D%3D%2A" class="link">Source</a></p><p class="src"><a name="v:-47--61--42-" class="def">(/=*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%2F%3D%2A" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:EqB" class="caption collapser" onclick="toggleSection('i:EqB')">Instances</p><div id="section.i:EqB" class="show"><table><tr><td class="src"><a href="Data-Boolean.html#t:EqB">EqB</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#t:Float">Float</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Boolean.html#t:EqB">EqB</a> bool a => <a href="Data-Boolean.html#t:EqB">EqB</a> (z -> bool) (z -> a)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Data-Boolean.html#t:Boolean">Boolean</a> bool => <a name="t:OrdB" class="def">OrdB</a> bool a | a -> bool <span class="keyword">where</span><a href="src/Data-Boolean.html#OrdB" class="link">Source</a></p><div class="doc"><p>Types with inequality. Minimum definition: '(<*)'. </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:-60--42-" class="def">(<*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%3C%2A" class="link">Source</a></p><p class="src"><a name="v:-62--61--42-" class="def">(>=*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%3E%3D%2A" class="link">Source</a></p><p class="src"><a name="v:-62--42-" class="def">(>*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%3E%2A" class="link">Source</a></p><p class="src"><a name="v:-60--61--42-" class="def">(<=*)</a> :: a -> a -> bool<a href="src/Data-Boolean.html#%3C%3D%2A" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:OrdB" class="caption collapser" onclick="toggleSection('i:OrdB')">Instances</p><div id="section.i:OrdB" class="show"><table><tr><td class="src"><a href="Data-Boolean.html#t:OrdB">OrdB</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#t:Float">Float</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Boolean.html#t:OrdB">OrdB</a> bool a => <a href="Data-Boolean.html#t:OrdB">OrdB</a> (z -> bool) (z -> a)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:minB" class="def">minB</a> :: (<a href="Data-Boolean.html#t:IfB">IfB</a> bool a, <a href="Data-Boolean.html#t:OrdB">OrdB</a> bool a) => a -> a -> a<a href="src/Data-Boolean.html#minB" class="link">Source</a></p><div class="doc"><p>Variant of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Ord.html#v:min">min</a></code> using <code><a href="Data-Boolean.html#v:ifB">ifB</a></code> and '(<=*)' </p></div></div><div class="top"><p class="src"><a name="v:maxB" class="def">maxB</a> :: (<a href="Data-Boolean.html#t:IfB">IfB</a> bool a, <a href="Data-Boolean.html#t:OrdB">OrdB</a> bool a) => a -> a -> a<a href="src/Data-Boolean.html#maxB" class="link">Source</a></p><div class="doc"><p>Variant of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Ord.html#v:max">max</a></code> using <code><a href="Data-Boolean.html#v:ifB">ifB</a></code> and '(>=*)' </p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.9.2</p></div></body></html>