<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head>
<title>Boolean Values</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<link rel="shortcut icon" href="icon.ico" />
<script src="common_en.js" charset="utf-8" type="text/javascript"></script> 
<link rel="stylesheet" href="common.css" type="text/css" />
</head>
<body onload="javascript:resetForms(); javascript:slidy_init();">
<div><h1 class="cover">Boolean Values</h1>
<div id="info"></div>
<ul>
<li><a href="#the-two-boolean-values">The Two Boolean Values</a></li>
<li><a href="#equality-and-ordering">Equality and Ordering</a></li>
<li><a href="#exercises">Exercises</a></li>
<li><a href="#exercise">Exercise</a></li>
<li><a href="#boolean-operators">Boolean Operators</a></li>
<li><a href="#exercise-1">Exercise</a></li>
<li><a href="#overview-of-precedence">Overview of Precedence</a></li>
<li><a href="#exercises-1">Exercises</a></li>
</ul>
</div>
<section id="the-two-boolean-values" class="level1">
<h1>The Two Boolean Values</h1>
<p>Boolean values:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','829e5cf636183f426fea17ebab84202b','829e5cf636183f426fea17ebab84202b');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea829e5cf636183f426fea17ebab84202b" value=":t True" /><br /><div class="answer" id="res829e5cf636183f426fea17ebab84202b"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','4dca5ce6ce959f10fbf2127cc2d1c1a2','4dca5ce6ce959f10fbf2127cc2d1c1a2');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea4dca5ce6ce959f10fbf2127cc2d1c1a2" value=":t False" /><br /><div class="answer" id="res4dca5ce6ce959f10fbf2127cc2d1c1a2"><code class="result">False</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="equality-and-ordering" class="level1">
<h1>Equality and Ordering</h1>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','986a2033d25cc83358a1bc1fbaa9b7ce','986a2033d25cc83358a1bc1fbaa9b7ce');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea986a2033d25cc83358a1bc1fbaa9b7ce" value=":t (==)" /><br /><div class="answer" id="res986a2033d25cc83358a1bc1fbaa9b7ce"><code class="result">(==)</code><code> :: </code><code class="type">Eq a =&gt; a -&gt; a -&gt; Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','ff62ac7cfbe434a861517157ff9bca21','ff62ac7cfbe434a861517157ff9bca21');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaff62ac7cfbe434a861517157ff9bca21" value=":t (&lt;)" /><br /><div class="answer" id="resff62ac7cfbe434a861517157ff9bca21"><code class="result">(&lt;)</code><code> :: </code><code class="type">Ord a =&gt; a -&gt; a -&gt; Bool</code></div></form>
<p>Meaning of <code>Eq a</code> and <code>Ord a</code>: the <code>a</code> may be replaced with almost any type, but they cannot be replaced with function types, for example.</p>
<p>Those are of the same precedence, but they are weaker than the previously introduced operators.</p>
<div class="handout">
<hr />
<p>Those operators are not associative.</p>
<p>Therefore it is invalid to place such operators after each other. For example, both <code>a == b == c</code> and <code>a &lt; b &gt; c</code> are invalid expressions.</p>
</div>
</section>
<section id="exercises" class="level1">
<h1>Exercises</h1>
<p>Make a conclusion on the result:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','273c73cb02db809fa4601c303930beb7','273c73cb02db809fa4601c303930beb7');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea273c73cb02db809fa4601c303930beb7" value="'a' &lt; 'x'" /><br /><div class="answer" id="res273c73cb02db809fa4601c303930beb7"></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','8941ec44e7d5cfec349db90785d4d375','8941ec44e7d5cfec349db90785d4d375');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea8941ec44e7d5cfec349db90785d4d375" value="&quot;foo&quot; &lt; &quot;foobar&quot;" /><br /><div class="answer" id="res8941ec44e7d5cfec349db90785d4d375"></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','01b979801e0a0350cca84aca3576fa05','01b979801e0a0350cca84aca3576fa05');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea01b979801e0a0350cca84aca3576fa05" value="[312,3] &lt; [312,1,3]" /><br /><div class="answer" id="res01b979801e0a0350cca84aca3576fa05"></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','d294715669754955251110bb9253d9b6','d294715669754955251110bb9253d9b6');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="taread294715669754955251110bb9253d9b6" value="[[]] &lt; [[[]]]" /><br /><div class="answer" id="resd294715669754955251110bb9253d9b6"></div></form>
</section>
<section id="exercise" class="level1">
<h1>Exercise</h1>
<p>Write an expression that is <code>True</code> if and only if <code>23</code> does not divide <code>532253373</code>.</p>
<form class="interpreter" action="javascript:getOne('c=eval&amp;f=Bools_en_a76c68e9820488e96e639b1479b8c800.hs','a76c68e9820488e96e639b1479b8c800','a76c68e9820488e96e639b1479b8c800');"><code class="prompt">Solution&gt; </code><input class="interpreter" type="text" size="80" id="tareaa76c68e9820488e96e639b1479b8c800" value="" /><br /><div class="answer" id="resa76c68e9820488e96e639b1479b8c800"></div></form>
</section>
<section id="boolean-operators" class="level1">
<h1>Boolean Operators</h1>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','01a0aa77886fdd14607a0b7b06497fe3','01a0aa77886fdd14607a0b7b06497fe3');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea01a0aa77886fdd14607a0b7b06497fe3" value="True &amp;&amp; False" /><br /><div class="answer" id="res01a0aa77886fdd14607a0b7b06497fe3"><code class="result">False</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','b93bdf039817d1e1b5541c1d711fd0fd','b93bdf039817d1e1b5541c1d711fd0fd');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab93bdf039817d1e1b5541c1d711fd0fd" value="True || False" /><br /><div class="answer" id="resb93bdf039817d1e1b5541c1d711fd0fd"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','6a536c536587cc728bf85aa4a52a0cb0','6a536c536587cc728bf85aa4a52a0cb0');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea6a536c536587cc728bf85aa4a52a0cb0" value="not True" /><br /><div class="answer" id="res6a536c536587cc728bf85aa4a52a0cb0"><code class="result">False</code><code> :: </code><code class="type">Bool</code></div></form>
<p>The Boolean AND has higher precedence than the Boolean OR and both of them have lower precedence than the previously described operators.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','ad95046821afdb8c115472caf78f9c11','ad95046821afdb8c115472caf78f9c11');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaad95046821afdb8c115472caf78f9c11" value=":t (&amp;&amp;)" /><br /><div class="answer" id="resad95046821afdb8c115472caf78f9c11"><code class="result">(&amp;&amp;)</code><code> :: </code><code class="type">Bool -&gt; Bool -&gt; Bool</code></div></form>
</section>
<section id="exercise-1" class="level1">
<h1>Exercise</h1>
<p>Write an expression clearly demonstrating that the <code>(&amp;&amp;)</code> is stronger than the <code>(||)</code>.</p>
<form class="interpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','6364d3f0f495b6ab9dcf8d3b5c6e0b01','6364d3f0f495b6ab9dcf8d3b5c6e0b01');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea6364d3f0f495b6ab9dcf8d3b5c6e0b01" value="" /><br /><div class="answer" id="res6364d3f0f495b6ab9dcf8d3b5c6e0b01"></div></form>
</section>
<section id="overview-of-precedence" class="level1">
<h1>Overview of Precedence</h1>
<table>
<tbody>
<tr class="odd">
<td style="text-align: left;">functions (<code>sqrt</code>, <code>div</code>, <code>mod</code>, etc.)</td>
<td style="text-align: center;">((.).)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>^</code>, <code>^^</code>, <code>**</code></td>
<td style="text-align: center;">(.(.))</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>*</code>, <code>/</code>, <code>`div`</code>, <code>`mod`</code></td>
<td style="text-align: center;">((.).)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>+</code>, <code>-</code> (subtraction and negation)</td>
<td style="text-align: center;">((.).)</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>==</code>, <code>/=</code>, <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code></td>
<td style="text-align: center;">-</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>&amp;&amp;</code></td>
<td style="text-align: center;">(.(.))</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>||</code></td>
<td style="text-align: center;">(.(.))</td>
</tr>
</tbody>
</table>
</section>
<section id="exercises-1" class="level1">
<h1>Exercises</h1>
<p>Put in parentheses.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','f53d9b1ba66906052a057a48fcb3428b','f53d9b1ba66906052a057a48fcb3428b');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaf53d9b1ba66906052a057a48fcb3428b" value="6 &lt; 4 || 4 &gt;= 5 &amp;&amp; 12 /= 4 * 4" /><br /><div class="answer" id="resf53d9b1ba66906052a057a48fcb3428b"></div></form>
<p>Remove the most parentheses.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','b32bd36ffa7e929f7aa22458c340c583','b32bd36ffa7e929f7aa22458c340c583');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab32bd36ffa7e929f7aa22458c340c583" value="(2 &lt; 1) || (2 * 100 &gt; (100 - 2) `rem` 1000)" /><br /><div class="answer" id="resb32bd36ffa7e929f7aa22458c340c583"></div></form>
<p>Put in parentheses.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Bools_en.hs','81a74fa6cf4c542dc82dd6fffeafece9','81a74fa6cf4c542dc82dd6fffeafece9');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea81a74fa6cf4c542dc82dd6fffeafece9" value="2 &lt; div 18 4 || mod 15 5 &gt; (-3)" /><br /><div class="answer" id="res81a74fa6cf4c542dc82dd6fffeafece9"></div></form>
</section>
</body>
</html>

