comparison categorical/monad.html @ 2:b4de894a1e2e

initial import
author Robert McIntyre <rlm@mit.edu>
date Fri, 28 Oct 2011 00:03:05 -0700
parents
children
comparison
equal deleted inserted replaced
1:8d8278e09888 2:b4de894a1e2e
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml"
5 lang="en" xml:lang="en">
6 <head>
7 <title>Monads in CS and Math</title>
8 <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
9 <meta name="generator" content="Org-mode"/>
10 <meta name="generated" content="2011-07-11 03:07:07 EDT"/>
11 <meta name="author" content="Robert McIntyre"/>
12 <meta name="description" content=""/>
13 <meta name="keywords" content=""/>
14 <style type="text/css">
15 <!--/*--><![CDATA[/*><!--*/
16 html { font-family: Times, serif; font-size: 12pt; }
17 .title { text-align: center; }
18 .todo { color: red; }
19 .done { color: green; }
20 .tag { background-color: #add8e6; font-weight:normal }
21 .target { }
22 .timestamp { color: #bebebe; }
23 .timestamp-kwd { color: #5f9ea0; }
24 .right {margin-left:auto; margin-right:0px; text-align:right;}
25 .left {margin-left:0px; margin-right:auto; text-align:left;}
26 .center {margin-left:auto; margin-right:auto; text-align:center;}
27 p.verse { margin-left: 3% }
28 pre {
29 border: 1pt solid #AEBDCC;
30 background-color: #F3F5F7;
31 padding: 5pt;
32 font-family: courier, monospace;
33 font-size: 90%;
34 overflow:auto;
35 }
36 table { border-collapse: collapse; }
37 td, th { vertical-align: top; }
38 th.right { text-align:center; }
39 th.left { text-align:center; }
40 th.center { text-align:center; }
41 td.right { text-align:right; }
42 td.left { text-align:left; }
43 td.center { text-align:center; }
44 dt { font-weight: bold; }
45 div.figure { padding: 0.5em; }
46 div.figure p { text-align: center; }
47 textarea { overflow-x: auto; }
48 .linenr { font-size:smaller }
49 .code-highlighted {background-color:#ffff00;}
50 .org-info-js_info-navigation { border-style:none; }
51 #org-info-js_console-label { font-size:10px; font-weight:bold;
52 white-space:nowrap; }
53 .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
54 font-weight:bold; }
55 /*]]>*/-->
56 </style>
57 <script type="text/javascript">
58 <!--/*--><![CDATA[/*><!--*/
59 function CodeHighlightOn(elem, id)
60 {
61 var target = document.getElementById(id);
62 if(null != target) {
63 elem.cacheClassElem = elem.className;
64 elem.cacheClassTarget = target.className;
65 target.className = "code-highlighted";
66 elem.className = "code-highlighted";
67 }
68 }
69 function CodeHighlightOff(elem, id)
70 {
71 var target = document.getElementById(id);
72 if(elem.cacheClassElem)
73 elem.className = elem.cacheClassElem;
74 if(elem.cacheClassTarget)
75 target.className = elem.cacheClassTarget;
76 }
77 /*]]>*///-->
78 </script>
79 <script type="text/javascript" src="http://orgmode.org/mathjax/MathJax.js">
80 <!--/*--><![CDATA[/*><!--*/
81 MathJax.Hub.Config({
82 // Only one of the two following lines, depending on user settings
83 // First allows browser-native MathML display, second forces HTML/CSS
84 // config: ["MMLorHTML.js"], jax: ["input/TeX"],
85 jax: ["input/TeX", "output/HTML-CSS"],
86 extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js",
87 "TeX/noUndefined.js"],
88 tex2jax: {
89 inlineMath: [ ["\\(","\\)"] ],
90 displayMath: [ ['$$','$$'], ["\\[","\\]"], ["\\begin{displaymath}","\\end{displaymath}"] ],
91 skipTags: ["script","noscript","style","textarea","pre","code"],
92 ignoreClass: "tex2jax_ignore",
93 processEscapes: false,
94 processEnvironments: true,
95 preview: "TeX"
96 },
97 showProcessingMessages: true,
98 displayAlign: "center",
99 displayIndent: "2em",
100
101 "HTML-CSS": {
102 scale: 100,
103 availableFonts: ["STIX","TeX"],
104 preferredFont: "TeX",
105 webFont: "TeX",
106 imageFont: "TeX",
107 showMathMenu: true,
108 },
109 MMLorHTML: {
110 prefer: {
111 MSIE: "MML",
112 Firefox: "MML",
113 Opera: "HTML",
114 other: "HTML"
115 }
116 }
117 });
118 /*]]>*///-->
119 </script>
120 </head>
121 <body>
122 <div id="content">
123
124
125
126 <h1>
127 Monads in CS and Math
128 </h1>
129
130 <p>
131 The purpose of a <i>monad</i> is to introduce a new data type into your
132 language and to integrate it with existing types; a monad augments a
133 pre-existing data type \(A\), creating a new type \(B\).
134 </p>
135 <p>
136 When describing monads, I will use the following terminology:
137 </p><ul>
138 <li>Values of type \(A\) are called <b>ordinary values</b>, because they belong
139 to the pre-existing data type.
140 </li>
141 <li>Values of type \(B\) are called <b>monadic values</b>, because they
142 belong to the type introduced by the monad.
143 </li>
144 <li>A function \(A\rightarrow B\) is called a <b>monadic function</b>; such
145 functions accept regular values as input and return monadic values.
146 </li>
147 </ul>
148
149
150 <p>
151 A monad consists of
152 two components for achieving this purpose:
153 </p>
154 <dl>
155 <dt>A function that converts ordinary values into monadic values</dt><dd>
156 <p>
157 First, in order to create a new data type, each monad has an
158 <i>upgrade function</i> which systematically adds structure to values of
159 the existing data type, \(A\). Because the upgrade function produces
160 enhanced values in a systematic way, the enhanced values constitute
161 a sort of new data type, \(B\).
162 </p></dd>
163 </dl>
164
165
166 <blockquote>
167
168
169 \(\text{upgrade}:A\rightarrow B\)
170
171 </blockquote>
172
173
174 <dl>
175 <dt>A function that enables monadic functions to accept monadic values</dt><dd>Second, each monad has a <i>pipe function</i> which is a
176 protocol for combining a monadic function and a monadic value to
177 produce a monadic value. The pipe function facilitates composition:
178 notice that a collection of monadic functions \(A\rightarrow B\) is composable only if they have been modified by the
179 pipe function to become functions of type \(B\rightarrow B\), otherwise their input and output types do not match.
180 </dd>
181 </dl>
182
183 <blockquote>
184
185
186 \(\text{pipe}:B\times B^A\rightarrow B\)
187
188 </blockquote>
189
190
191
192
193
194
195 <pre class="src src-clojure">(<span style="color: #f0dfaf; font-weight: bold;">ns</span> categorical.monad)
196
197 </pre>
198
199
200
201
202
203 <div id="table-of-contents">
204 <h2>Table of Contents</h2>
205 <div id="text-table-of-contents">
206 <ul>
207 <li><a href="#sec-1">1 Examples of monads </a>
208 <ul>
209 <li><a href="#sec-1-1">1.1 The nondeterministic monad </a></li>
210 </ul>
211 </li>
212 </ul>
213 </div>
214 </div>
215
216 <div id="outline-container-1" class="outline-2">
217 <h2 id="sec-1"><span class="section-number-2">1</span> Examples of monads </h2>
218 <div class="outline-text-2" id="text-1">
219
220
221 </div>
222
223 <div id="outline-container-1-1" class="outline-3">
224 <h3 id="sec-1-1"><span class="section-number-3">1.1</span> The nondeterministic monad </h3>
225 <div class="outline-text-3" id="text-1-1">
226
227
228 <p>
229 We'll implement nondeterministic programming by defining a monad <code>amb</code>
230 that transforms ordinary deterministic functions into functions that ``ambiguously'' return zero or more
231 values.
232 </p>
233
234
235
236 <pre class="src src-clojure"></pre>
237
238
239
240 </div>
241 </div>
242 </div>
243 <div id="postamble">
244 <p class="date">Date: 2011-07-11 03:07:07 EDT</p>
245 <p class="author">Author: Robert McIntyre</p>
246 <p class="creator">Org version 7.6 with Emacs version 23</p>
247 <a href="http://validator.w3.org/check?uri=referer">Validate XHTML 1.0</a>
248 </div>
249 </div>
250 </body>
251 </html>