<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkcBRX4_eSp7ImA9WhBaEks.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218</id><updated>2013-05-22T23:00:54.041+01:00</updated><category term="F# QuickSort CPS Continuations" /><category term="catamorphism" /><category term="WPF" /><title>F# Code</title><subtitle type="html">Useful snippets of F# code, formatted in a way that makes it easy to copy and paste the snippet in the F# Interactive editor.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://fsharpcode.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/FCode" /><feedburner:info uri="fcode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkcBRX4-fSp7ImA9WhBaEks.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-414545211018568108</id><published>2013-05-22T22:54:00.001+01:00</published><updated>2013-05-22T23:00:54.055+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-22T23:00:54.055+01:00</app:edited><title>Zipper Forests ( from Haskell )</title><content type="html">&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;type&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; 'a Tree = { rootLabel:'a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subForest:'a Forest }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;and&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; 'a Forest = 'a Tree list&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;type&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; 'a TreeLoc = { tree : 'a Tree&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts : 'a Forest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights : 'a Forest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents : ('a Forest * 'a *
'a Forest) list }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
create_node : 'a -&amp;gt; 'a Tree&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; create_node x = { rootLabel = x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subForest = [] }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
maybe : 'a -&amp;gt; ('b -&amp;gt; 'a) -&amp;gt; 'b option -&amp;gt; 'a&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; maybe n f m = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; m &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | None &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; n&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Some x &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; f x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
combChildren : 'a list -&amp;gt; 'a -&amp;gt; 'a list -&amp;gt; 'a list&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;private&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; combChildren ls t rs = List.fold (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;fun&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; xs x &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; x::xs) (t::rs) ls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
downParents : 'a TreeLoc -&amp;gt; ('a Forest * 'a * 'a Forest) list&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;private&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; downParents loc = (loc.lefts, (loc.tree).rootLabel,
loc.rights) :: loc.parents&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
splitChildren : 'a list -&amp;gt; 'a list -&amp;gt; int -&amp;gt; ('a list * 'a list)
option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;rec&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; splitChildren acc xs n = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (acc, xs, n) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (acc, xs, 0) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some (acc, xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (acc, x::xs, n) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; splitChildren (x::acc) xs (n
- 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _ &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
parent : 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; parent loc = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; loc.parents &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (pls, v, prs) :: ps &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Some { tree = {
rootLabel = v&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
subForest = (combChildren (loc.lefts) (loc.tree) (loc.rights)) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts = pls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights = prs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parents = ps }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
root : 'a TreeLoc -&amp;gt; 'a TreeLoc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;rec&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; root loc = maybe loc root (parent loc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
left : 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; left loc = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; loc.lefts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | t::ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some&amp;nbsp; { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts = ts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
loc.tree :: loc.rights }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
right : 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; right loc = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; loc.rights &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | t::ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts =
loc.tree :: loc.lefts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rights = ts }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
firstChild : 'a TreeLoc -&amp;gt; 'a TreeLoc option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; firstChild loc = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (loc.tree).subForest &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | t::ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lefts = []&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
ts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents
= downParents loc }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
lastChild : 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; lastChild loc = &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (List.rev ((loc.tree).subForest)) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | t::ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts =
ts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
[]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents =
downParents loc }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
getChild : int -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; getChild n loc = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; splitChildren [] ((loc.tree).subForest)
n&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Option.map (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;fun&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (t::ls, rs) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
lefts = ls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rights = rs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
parents = downParents loc })&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
findChild : ('a Tree -&amp;gt; bool) -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; findChild p loc =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;rec&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; split acc xs = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; xs &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | x::xs &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;when&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; p x &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some(acc, x, xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | x::xs &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; split (x::acc) xs &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | []&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; split [] ((loc.tree).subForest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Option.map (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;fun&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (ls, t, rs) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
lefts = ls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rights = rs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
parents = downParents loc })&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
fromTree : 'a Tree -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; fromTree t = { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts = []&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights = []&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents = [] }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
fromForest : 'a Forest -&amp;gt; 'a TreeLoc option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; fromForest (ts : 'a Forest) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;match&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | t::ts &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; Some { tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts = []&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights = ts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents = [] }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
toTree : 'a TreeLoc -&amp;gt; 'a Tree&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; toTree loc = (root loc).tree&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
toForest : 'a TreeLoc -&amp;gt; 'a Forest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; toForest loc : 'a Forest = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; r = root loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;in&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; combChildren (r.lefts) (r.tree) (r.rights)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
isRoot : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; isRoot loc = List.isEmpty (loc.parents)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
isFirst : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; isFirst loc = List.isEmpty (loc.lefts)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
isLast : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; isLast loc = List.isEmpty (loc.rights)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
isLeaf : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; isLeaf loc = List.isEmpty ((loc.tree).subForest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
isChild : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; isChild loc = not (isRoot loc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
hasChildren : 'a TreeLoc -&amp;gt; bool&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; hasChildren loc = not (isLeaf loc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
setTree : 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; setTree t loc = { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
modifyTree : ('a Tree -&amp;gt; 'a Tree) -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; modifyTree f loc = setTree (f (loc.tree)) loc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
setLabel : 'a -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; setLabel v loc = modifyTree (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;fun&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; t &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; { t &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; rootLabel = v }) loc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
getLabel : 'a TreeLoc -&amp;gt; 'a&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; getLabel loc = (loc.tree).rootLabel&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
modifyLabel : ('a -&amp;gt; 'a) -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; modifyLabel f loc = setLabel (f (getLabel loc)) loc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
insertLeft : 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; insertLeft t loc = { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
loc.tree :: loc.rights }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
insertRight : 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; insertRight t loc = { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts =
loc.tree :: loc.lefts }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
insertDownFirst : 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; insertDownFirst t loc = { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts =
[]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
(loc.tree).subForest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parents = downParents loc }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
insertDownLast : 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; insertDownLast t loc = { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lefts =
List.rev ((loc.tree).subForest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rights =
[]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parents =
downParents loc }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; color: green; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;//
insertDownAt : int -&amp;gt; 'a Tree -&amp;gt; 'a TreeLoc -&amp;gt; 'a TreeLoc option&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;let&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; insertDownAt n t loc = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; splitChildren [] ((loc.tree).subForest)
n&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Option.map (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;fun&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; (ls, rs) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; { loc &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt; mso-highlight: white;"&gt;with&lt;/span&gt;&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt; tree = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
lefts = ls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rights = rs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt; line-height: 115%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
parents = downParents loc })&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/xnmjM7sD3b4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/414545211018568108/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=414545211018568108" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/414545211018568108?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/414545211018568108?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/xnmjM7sD3b4/zipper-forests-from-haskell.html" title="Zipper Forests ( from Haskell )" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2013/05/zipper-forests-from-haskell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSXszcCp7ImA9WhNaEEo.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-6187256295924655782</id><published>2013-01-24T23:30:00.001Z</published><updated>2013-01-24T23:40:38.588Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-24T23:40:38.588Z</app:edited><title>Rx Live Morse Code Translation</title><content type="html">&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Threading&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Threading&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Tasks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Reactive&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Reactive&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Threading&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Reactive&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Concurrency&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Reactive&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Subjects&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;module&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; observeOn
(scheduler&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IScheduler) (xs&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;ObserveOn(xs, scheduler)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; subscribeOn
(scheduler&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IScheduler) (xs&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;SubscribeOn(xs, scheduler)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; window (f&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Unit &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;b&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) (xs&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&amp;nbsp; &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Window(xs, &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;new&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Func&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;b&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;(f))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; subscribe' f g (xs&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ObservableExtensions&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Subscribe(xs, &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;new&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Action&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;(f), &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;new&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Action(g))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; splitBy separator (xs&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IObservable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
xs &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;window (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;fun&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; () &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; xs &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;filter (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;fun&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; x &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; x &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; separator))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;map (Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;filter (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;fun&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; y &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; y &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; separator))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; MorseCode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Node &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;of&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; string &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;*&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; MorseCode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;*&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; MorseCode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Leaf &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;of&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; string&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Empty&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; morseCodeTree &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; zeroNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"0"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; nineNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"9"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; dashNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;""&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, zeroNode, nineNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; nullLeaf &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Empty&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; eightNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"8"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; dotNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;""&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, nullLeaf, eightNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; oNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"O"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, dashNode, dotNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; qNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"Q"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, nullLeaf, nullLeaf)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; sevenNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"7"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; zNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"Z"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, nullLeaf, sevenNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; gNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"G"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, qNode, zNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; mNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"M"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, oNode, gNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; yNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"Y"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; cNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"C"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; kNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"K"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, yNode, cNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; xNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"X"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; sixNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"6"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; bNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"B"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, nullLeaf, sixNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; dNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"D"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, xNode, bNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; nNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"N"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, kNode, dNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; tNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"T"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, mNode, nNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; oneNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"1"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; jNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"J"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, oneNode, nullLeaf)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; pNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"P"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; wNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"W"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, jNode, pNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; lNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"L"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; rNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"R"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, nullLeaf, lNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; aNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"A"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, wNode, rNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; twoNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"2"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; udNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;""&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, twoNode, nullLeaf)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; fNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"F"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; uNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"U"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, udNode, fNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; threeNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"3"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; vNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"V"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, threeNode, nullLeaf)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; fourNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"4"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; fiveNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Leaf(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"5"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; hNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"H"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, fourNode, fiveNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; sNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"S"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, vNode, hNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; iNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"I"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, uNode, sNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; eNode &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;
Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;"E"&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, aNode, iNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Node(&lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;""&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, tNode, eNode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; extractChar n &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;match&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; n &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;with&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Node (ch, _, _) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Leaf ch &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Empty &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;""&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; processChar acc ch &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;match&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; (ch, acc) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;with&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;'-'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, Node (_, dash, _) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; dash&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;'.'&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;, Node (_, _, dot) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; dot&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _ &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Empty&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; translateMorseCode xs &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xs &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; splitBy &lt;/span&gt;&lt;span style="color: #ec7600; font-family: Consolas; font-size: 9.5pt;"&gt;' '&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;map(Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;scan processChar
morseCodeTree &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;map extractChar)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; processKeyPress(subject&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;ISubject&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;char&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;mutable&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; info&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;ConsoleKeyInfo
option &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; None &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;while&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; (info&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;IsNone &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;||&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; info&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Value&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Key &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ConsoleKey&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Enter) &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;do&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Some (Console&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;ReadKey())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;subject&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;OnNext info&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Value&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;KeyChar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Exit(&lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;0&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; getKeyPresses &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; subject &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;new&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Subject&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;char&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Task&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Run(&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;fun&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; () &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; processKeyPress(subject)) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ignore&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;observeOn(CurrentThreadScheduler&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Instance)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;mutable&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; index &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;0&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; writeCode (x&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;:&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;string) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; oldpos &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Console&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;CursorLeft&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Console&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;SetCursorPosition (index, &lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;1&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Console&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Write x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Console&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;SetCursorPosition (oldpos, &lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;0&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;getKeyPresses &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; translateMorseCode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;subscribe(Observable&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;subscribe'
writeCode&amp;nbsp; (&lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;fun&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; () &lt;/span&gt;&lt;span style="color: #93c763; font-family: Consolas; font-size: 9.5pt;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; index &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; index &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;+&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;1&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;) &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ignore) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;|&amp;gt;&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; ignore&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Thread&lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;.&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt;Sleep &lt;/span&gt;&lt;span style="color: #e8e2b7; font-family: Consolas; font-size: 9.5pt;"&gt;-&lt;/span&gt;&lt;span style="color: #ffcd22; font-family: Consolas; font-size: 9.5pt;"&gt;1&lt;/span&gt;&lt;span style="color: #f1f2f3; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;iobservable b=""&gt;&lt;char&gt;&lt;!-----&gt;&lt;!-----&gt;&lt;/char&gt;&lt;/iobservable&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/jAPfJ-Y_Ht4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/6187256295924655782/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=6187256295924655782" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6187256295924655782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6187256295924655782?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/jAPfJ-Y_Ht4/rx-live-morse-code-translation.html" title="Rx Live Morse Code Translation" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2013/01/rx-live-morse-code-translation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NSHcyeSp7ImA9WhdXFUs.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-8116438999160778573</id><published>2011-08-28T21:34:00.001+01:00</published><updated>2011-08-28T21:38:19.991+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-28T21:38:19.991+01:00</app:edited><title>Functional IoC Container Example</title><content type="html">&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; StateMonad() =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.ReturnFrom x = x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Return x s = (x, s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Bind (m, f) s = &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (x, s1) = m s &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; (f x) s1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; state = &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; StateMonad()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; IEnvironment = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; UserName : string &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ILogger = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; Log : string &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Container = { Environment : IEnvironment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logger : ILogger }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getContainer = &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; f &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (f(), f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; run ctx m = m (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; () &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ctx) |&amp;gt; fst&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; fac n acc&amp;nbsp; = state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; container = getContainer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Logger.Log (sprintf &lt;span style="color: red;"&gt;"%d"&lt;/span&gt; acc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; (n = 0) &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; acc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;else&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; fac (n - 1) (n * acc) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; compute n = state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; container = getContainer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Logger.Log (sprintf &lt;span style="color: red;"&gt;"Begin fac %d"&lt;/span&gt; n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; result = fac n 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Logger.Log (sprintf &lt;span style="color: red;"&gt;"End fac %d"&lt;/span&gt; n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; userName = container.Environment.UserName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Logger.Log (sprintf &lt;span style="color: red;"&gt;"Computed by %s"&lt;/span&gt; userName)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; result }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; prodContainer = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Environment = { &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; IEnvironment &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.UserName &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get () = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Environment.UserName } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logger = { &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; ILogger &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Log s = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine (&lt;span style="color: red;"&gt;"{0} : {1}"&lt;/span&gt;, (DateTime.Now), s) } }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; testContainer = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Environment = { &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; IEnvironment &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.UserName &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get () = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;"John Doe"&lt;/span&gt; } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logger = { &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; ILogger &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Log s = Console.WriteLine (&lt;span style="color: red;"&gt;" {0} "&lt;/span&gt;,&amp;nbsp; s) } }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;printfn &lt;span style="color: red;"&gt;"Result %A"&lt;/span&gt; (run prodContainer (compute 10))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;printfn &lt;span style="color: red;"&gt;"Result %A"&lt;/span&gt; (run testContainer (compute 10))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/vj5HfiQGavE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/8116438999160778573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=8116438999160778573" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/8116438999160778573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/8116438999160778573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/vj5HfiQGavE/functional-ioc-container-example.html" title="Functional IoC Container Example" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/08/functional-ioc-container-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIBR3k9fCp7ImA9WhdSEE4.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-3192505065947164720</id><published>2011-07-17T17:28:00.002+01:00</published><updated>2011-07-19T00:09:16.764+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T00:09:16.764+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Functional WPF Part Five (Simple example of how to use it)</title><content type="html">&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: 13px;"&gt;// Example using the Functional WPF DSL&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// View Model&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Person (firstName, lastName, age) =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; New (firstName, lastName, age) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Person(firstName, lastName, age)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.LastName &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get () = lastName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;and&lt;/span&gt; set (value : string) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.FirstName &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get () = firstName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;and&lt;/span&gt; set (value : string) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Age &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; get () = age&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;and&lt;/span&gt; set (value : int) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; dataContext = [(&lt;span style="color: red;"&gt;"Homer"&lt;/span&gt;, &lt;span style="color: red;"&gt;"Simpson"&lt;/span&gt;, 46)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style="color: red;"&gt;"Marge"&lt;/span&gt;, &lt;span style="color: red;"&gt;"Simpson"&lt;/span&gt;, 42)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style="color: red;"&gt;"Lisa"&lt;/span&gt;, &lt;span style="color: red;"&gt;"Simpson"&lt;/span&gt;, 9)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style="color: red;"&gt;"Bart"&lt;/span&gt;, &lt;span style="color: red;"&gt;"Simpson"&lt;/span&gt;, 12) ] |&amp;gt; List.map (Person.New)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Header&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; header = [ label [width 100] &lt;span style="color: red;"&gt;"First Name"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label [width 100] &lt;span style="color: red;"&gt;"Last Name"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label [width 50] &lt;span style="color: red;"&gt;"Age"&lt;/span&gt; ] |&amp;gt; stackpanel [] Horizontal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Row&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; row = [ textbox [width 100] &amp;lt;@@ &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; (x:Person) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x.FirstName @@&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textbox [width 100] &amp;lt;@@ &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; (x:Person) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x.LastName @@&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textbox [width 50] &amp;lt;@@ &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; (x:Person) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x.Age @@&amp;gt; ] &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; stackpanel [] Horizontal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Data Template&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; sampleTemplate = datatemplate row&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Final composition&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; sampleGrid = [ header&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; itemscontrol sampleTemplate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button &lt;span style="color: red;"&gt;"submit"&lt;/span&gt; ] |&amp;gt; stackpanel [width 250] Vertical&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;gt; border Blue&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Main Window&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; mainWindow = window [width 400; height 200] sampleGrid&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Application&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; sampleApplication = application mainWindow&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Run the app with the given dataContext&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;[&amp;lt;STAThread()&amp;gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;do&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; run sampleApplication dataContext&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/PW7TSYO_PjE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/3192505065947164720/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=3192505065947164720" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3192505065947164720?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3192505065947164720?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/PW7TSYO_PjE/functional-wpf-part-five-simple-example.html" title="Functional WPF Part Five (Simple example of how to use it)" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/07/functional-wpf-part-five-simple-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMRnc7cCp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-4497249342583146659</id><published>2011-07-17T17:22:00.001+01:00</published><updated>2011-07-17T17:23:07.908+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T17:23:07.908+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Functional WPF Part Four</title><content type="html">&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: 13px;"&gt;// Functional WPF Part Four&lt;/span&gt;&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: 13px;"&gt;// Running the WPF Application&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;#if&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; INTERACTIVE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;#r @"WindowsBase.dll"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;#r @"PresentationCore.dll"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;#r @"PresentationFramework.dll"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;#endif&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Windows&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Windows.Controls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Windows.Markup&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; run app data = app |&amp;gt; parseApplication&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; XamlReader.Parse&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (x :?&amp;gt; System.Windows.Application)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x.MainWindow.DataContext &amp;lt;- data&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.MainWindow.Show()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.Run()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; ignore&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/lnF0Mc-w4yI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/4497249342583146659/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=4497249342583146659" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/4497249342583146659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/4497249342583146659?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/lnF0Mc-w4yI/functional-wpf-part-four.html" title="Functional WPF Part Four" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/07/functional-wpf-part-four.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDR3c9eyp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-3420338812349427791</id><published>2011-07-17T17:15:00.002+01:00</published><updated>2011-07-17T17:19:36.963+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T17:19:36.963+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Functional WPF Part Three</title><content type="html">&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: x-small;"&gt;// Functional WPF Part Three&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Parsing to Xaml&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseColor o = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; o &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Red &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Red"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Green &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Green"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Blue &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Blue"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseOrientation o = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; o &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Horizontal &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Horizontal"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Vertical &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Vertical"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseAttribute attr = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; attr &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Width x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"Width = ""%i"""&lt;/span&gt; x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Height x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"Height = ""%i"""&lt;/span&gt; x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseAttributes = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List.fold (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; acc x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;"%s %s"&lt;/span&gt; acc (parseAttribute x)) &lt;span style="color: red;"&gt;""&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; parseBinding (b:Expr) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; b &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Lambda (_, e) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; parseBinding e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | PropertyGet (_, info, _) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"{Binding Path=%s}"&lt;/span&gt; (info.Name)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; parseDataTemplate (DataTemplate x) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;DataTemplate&amp;gt;%s&amp;lt;/DataTemplate&amp;gt;"&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (parseFrameworkElement x)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;and&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseFrameworkElement x = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Label (s, attrs) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;Label Content=""%s"" %s/&amp;gt;"&lt;/span&gt; s &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseAttributes attrs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Button s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;Button Content=""%s""/&amp;gt;"&lt;/span&gt; s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | TextBox (attrs, b) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;TextBox %s Text=""%s""/&amp;gt;"&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseAttributes attrs) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseBinding b)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | StackPanel (xs, attrs, orient) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (+) x y = sprintf &lt;span style="color: red;"&gt;"%s\n%s"&lt;/span&gt; x y&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sprintf &lt;span style="color: red;"&gt;@"&amp;lt;StackPanel Orientation = ""%s"" %s&amp;gt;%s&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/StackPanel&amp;gt;"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(parseOrientation orient)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(parseAttributes attrs) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(List.fold (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; acc x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; acc + (parseFrameworkElement x)) &lt;span style="color: red;"&gt;""&lt;/span&gt; xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Border (c, x) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;Border BorderBrush=""%s"" &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BorderThickness=""2""&amp;gt;%s&amp;lt;/Border&amp;gt;"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseColor c) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(parseFrameworkElement x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ItemsControl t &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sprintf &lt;span style="color: red;"&gt;@"&amp;lt;ItemsControl ItemsSource=""{Binding .}""&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="Apple-style-span" style="color: red; font-family: Consolas; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ItemsControl.ItemTemplate&amp;gt;%s&amp;lt;/ItemsControl.ItemTemplate&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/ItemsControl&amp;gt;"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (parseDataTemplate t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseWindow (Window (c, attrs)) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;Window %s&amp;gt;%s&amp;lt;/Window&amp;gt;"&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseAttributes attrs) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseFrameworkElement c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; parseApplication (Application c) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf &lt;span style="color: red;"&gt;@"&amp;lt;Application&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Application.MainWindow&amp;gt;%s&amp;lt;/Application.MainWindow&amp;gt;&amp;lt;/Application&amp;gt;"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (parseWindow c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/cXlRxPB39so" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/3420338812349427791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=3420338812349427791" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3420338812349427791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3420338812349427791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/cXlRxPB39so/functional-wpf-part-three.html" title="Functional WPF Part Three" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/07/functional-wpf-part-three.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cNQXc5eyp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-9139381248771732459</id><published>2011-07-17T17:11:00.000+01:00</published><updated>2011-07-17T17:11:30.923+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T17:11:30.923+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Functional WPF Part Two</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Functional WPF Part Two&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Helper functions&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; width = Width &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; height = Height&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; stackpanel attrs orient xs = StackPanel (xs, attrs, orient)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; border c x = Border(c, x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; label attrs s = Label(s, attrs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; button = Button&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; textbox attrs b = TextBox(attrs, b)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; itemscontrol = ItemsControl&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; datatemplate = DataTemplate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; application = Application&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; window attrs c = Window (c, attrs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/1eTVAgvooRE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/9139381248771732459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=9139381248771732459" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/9139381248771732459?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/9139381248771732459?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/1eTVAgvooRE/functional-wpf-part-two.html" title="Functional WPF Part Two" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/07/functional-wpf-part-two.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MQXs_eCp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-1984284639170250442</id><published>2011-07-17T17:08:00.000+01:00</published><updated>2011-07-17T17:08:00.540+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T17:08:00.540+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Functional WPF Part One</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Functional WPF (An Experiment in F# DSL to Xaml)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Microsoft.FSharp.Quotations&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Microsoft.FSharp.Quotations.Patterns&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Type Definitions&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Color = Red | Green | Blue&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Orientation = Horizontal | Vertical&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Attribute = Width &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Height &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; DataTemplate = DataTemplate &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; FrameworkElement&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;and&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; FrameworkElement &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = Label &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string * Attribute list&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Button &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | TextBox &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Attribute list * Expr&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | StackPanel &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; FrameworkElement list * Attribute list * Orientation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Border &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Color * FrameworkElement&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ItemsControl &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; DataTemplate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Window = Window &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; FrameworkElement * Attribute list&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Application = Application &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Window&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/lZmyHtO6wFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/1984284639170250442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=1984284639170250442" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/1984284639170250442?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/1984284639170250442?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/lZmyHtO6wFQ/functional-wpf-part-one.html" title="Functional WPF Part One" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/07/functional-wpf-part-one.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QEQnY7fCp7ImA9WhZVFUU.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-2965810058594631937</id><published>2011-05-28T02:41:00.001+01:00</published><updated>2011-05-28T13:21:43.804+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-28T13:21:43.804+01:00</app:edited><title>Reactive Extensions v1.0.10425 Computation Expression Builder</title><content type="html">&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: 13px;"&gt;// Reactive Extensions v1.0.10425 Computation Expression Builder&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: x-small;"&gt;//&amp;nbsp;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/gg577609"&gt;http://msdn.microsoft.com/en-us/data/gg577609&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Reactive.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; rxBuilder() =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Bind ((xs:'a IObservable), (f:'a&amp;nbsp;&lt;span class="Apple-style-span" style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&amp;nbsp;'b IObservable)) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.SelectMany (xs, f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Delay f = Observable.Defer f&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Return x = Observable.Return x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.ReturnFrom xs = xs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Combine (xs:'a IObservable, ys: 'a IObservable) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.Concat (xs, ys)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.For (xs : 'a seq, f: 'a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; 'b IObservable) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.For(xs, &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Func&amp;lt;_, IObservable&amp;lt;_&amp;gt;&amp;gt;(f))&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.TryFinally (xs: 'a IObservable, f : unit &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.Finally(xs, &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Action(f))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.TryWith (xs: 'a IObservable, f: exn &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; 'a IObservable) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Observable.Catch (xs, &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Func&amp;lt;exn, 'a IObservable&amp;gt;(f))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.While (f, xs: 'a IObservable) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.While (&lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Func&amp;lt;bool&amp;gt;(f), xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Yield x = Observable.Return x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.YieldFrom xs = xs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Zero () = Observable.Empty()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; rx = rxBuilder()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Rx combinators&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; repeat (xs:IObservable&amp;lt;_&amp;gt;) = xs.Repeat()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Sample usages&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; xs = rx { &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; 42&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; 43 }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ys = rx { &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; 42&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield!&lt;/span&gt; xs }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; zs = rx { &lt;span style="color: #00aaff;"&gt;for&lt;/span&gt; i = 0 &lt;span style="color: #00aaff;"&gt;to&lt;/span&gt; 10 &lt;span style="color: #00aaff;"&gt;do&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; i }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; redTime = rx { &lt;span style="color: #00aaff;"&gt;while&lt;/span&gt; (DateTime.Now.Second &amp;gt; 30) &lt;span style="color: #00aaff;"&gt;do&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; ConsoleColor.Red }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; blueTime = rx { &lt;span style="color: #00aaff;"&gt;while&lt;/span&gt; (DateTime.Now.Second &amp;lt; 30) &lt;span style="color: #00aaff;"&gt;do&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; ConsoleColor.Green }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; coloredTime&amp;nbsp; = rx { &lt;span style="color: #00aaff;"&gt;yield!&lt;/span&gt; redTime &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield!&lt;/span&gt; blueTime } |&amp;gt; repeat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/rDQbQHOROOw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/2965810058594631937/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=2965810058594631937" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/2965810058594631937?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/2965810058594631937?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/rDQbQHOROOw/reactive-extensions-v1010425.html" title="Reactive Extensions v1.0.10425 Computation Expression Builder" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/05/reactive-extensions-v1010425.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QMQ38yfip7ImA9WhZXEU8.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-5937043215883970022</id><published>2011-04-29T19:36:00.005+01:00</published><updated>2011-04-30T00:56:22.196+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-30T00:56:22.196+01:00</app:edited><title>Kleisli List Arrow Combinators</title><content type="html">&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Kleisli List Arrow&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ( &amp;gt;&amp;gt;= ) : 'a list -&amp;gt; ('a -&amp;gt; 'b list) -&amp;gt; 'b list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (&amp;gt;&amp;gt;=) m f = m |&amp;gt; List.map f |&amp;gt; List.concat &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// unit : 'a -&amp;gt; 'a list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; unit x = [x]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Arrow&amp;lt;'i,'o&amp;gt; = Arrow &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt;('i &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; 'o list)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// arr : ('a -&amp;gt; 'b list) -&amp;gt; Arrow&amp;lt;'a,'b&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; arr f = Arrow f&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// pure' : ('a -&amp;gt; 'b) -&amp;gt; Arrow&amp;lt;'a,'b&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; pure' f = arr (unit &amp;lt;&amp;lt; f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ( &amp;gt;&amp;gt;&amp;gt;&amp;gt; ) : Arrow&amp;lt;'a,'b&amp;gt; -&amp;gt; Arrow&amp;lt;'b,'c&amp;gt; -&amp;gt; Arrow&amp;lt;'a,'c&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (&amp;gt;&amp;gt;&amp;gt;&amp;gt;) (Arrow f) (Arrow g) = arr ((&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; m &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; m &amp;gt;&amp;gt;= g) &amp;lt;&amp;lt; f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// first : Arrow&amp;lt;'a,'b&amp;gt; -&amp;gt; Arrow&amp;lt;('a * 'c),('b * 'c)&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; first (Arrow f) = arr (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt;(x,y) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (f x) &amp;gt;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;(&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x' &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit (x', y)))&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// second : Arrow&amp;lt;'a,'b&amp;gt; -&amp;gt; Arrow&amp;lt;('c * 'a),('c * 'b)&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; second (Arrow f) = arr (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt;(x,y) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (f y) &amp;gt;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;(&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; y' &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit (x, y')))&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// mapA : Arrow&amp;lt;'a,'b&amp;gt; -&amp;gt; ('b -&amp;gt; 'c) -&amp;gt; Arrow&amp;lt;'a,'c&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Not sure about this one. Is it right ?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; mapA m f = m &amp;gt;&amp;gt;&amp;gt;&amp;gt; pure' f&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// toMonad : Arrow&amp;lt;unit,'a&amp;gt; -&amp;gt; 'a list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; toMonad (Arrow f) = f()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// map : 'a list -&amp;gt; ('a -&amp;gt; 'b) -&amp;gt; 'b list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; map m f = mapA (arr (&lt;span style="color: #00aaff;"&gt;fun&amp;nbsp;&lt;/span&gt;_ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; m)) f |&amp;gt; toMonad&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// bind : 'a list -&amp;gt; ('a -&amp;gt; 'b list) -&amp;gt; 'b list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; bind m f = (arr (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; m) &amp;gt;&amp;gt;&amp;gt;&amp;gt; arr f) |&amp;gt; toMonad&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// fix : (('a -&amp;gt; 'b) -&amp;gt; 'a -&amp;gt; 'b) -&amp;gt; 'a -&amp;gt; 'b&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; fix f x = f (fix f) x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// mfix : ('a -&amp;gt; 'a list) -&amp;gt; 'a list&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// This one is wrong. Help!&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; mfix f = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt;&amp;nbsp;fix (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;&amp;nbsp;x -&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: 13px;"&gt;() -&amp;gt; f(List.head (x()))) () &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| [] &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| x::_ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x :: mfix (List.tail&amp;lt;&amp;lt; f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// liftM : ('a -&amp;gt; 'b) -&amp;gt; 'a list -&amp;gt; 'b list&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; liftM f m = m &amp;gt;&amp;gt;= (&lt;span style="color: #00aaff;"&gt;fun&amp;nbsp;&lt;/span&gt;a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit (f a))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// loop : Arrow&amp;lt;('a * 'b),('c * 'b)&amp;gt; -&amp;gt; Arrow&amp;lt;'a,'c&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; loop (Arrow f) = &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; f' x y = f (x, snd y)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arr (liftM fst &amp;lt;&amp;lt; mfix &amp;lt;&amp;lt; f')&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/f3aciCMJqBY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/5937043215883970022/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=5937043215883970022" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/5937043215883970022?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/5937043215883970022?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/f3aciCMJqBY/kleisli-list-arrow-combinators.html" title="Kleisli List Arrow Combinators" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2011/04/kleisli-list-arrow-combinators.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGRHg-fCp7ImA9Wx5SGUw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-8022437158719122058</id><published>2010-08-15T23:50:00.000+01:00</published><updated>2010-08-15T23:50:25.654+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-15T23:50:25.654+01:00</app:edited><title>Hindley Milner Type Inference Sample Implementation</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Learn more about F# at http://fsharp.net&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Hindley Milner Type Inference Sample Implementation&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// AST&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Literal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;= Char&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;char&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// character literal&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| String &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// string literal&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Integer &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;int&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// integer literal&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Float&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;float&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// floating point literal&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Exp &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;= Var&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// variable&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Lam&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string * Exp&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// lambda abstraction&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| App&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Exp * Exp&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// application&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| InfixApp &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Exp * string * Exp&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// infix application&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Let&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string * Exp * Exp&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// local definition&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Lit&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Literal&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;// literal &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Type Tree&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;= TyLam &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Type * Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; string * Type list&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;override&lt;/span&gt; this.ToString() = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; this &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyLam (t1, t2) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; sprintf &lt;span style="color: maroon;"&gt;"(%s -&amp;gt; %s)"&lt;/span&gt; (t1.ToString()) (t2.ToString())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon (s, ts) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Subtitutions&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Subst = Subst &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Map&amp;lt;string, Type&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// extend: string -&amp;gt; Type -&amp;gt; Subst -&amp;gt; Subst&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; extend v t (Subst s) = Subst (Map.add v t s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// lookup: string -&amp;gt; Subst -&amp;gt; Type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; lookup v (Subst s) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; (Map.containsKey v s) &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Map.find v s &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;else&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TyVar v&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Apply a type substitution to a type &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// subs: Type -&amp;gt; Subst -&amp;gt; Type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; subs t s = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; t &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar n &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; t' = lookup n s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; t = t' &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; t'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;else&lt;/span&gt; subs t' s&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyLam(a, r) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TyLam(subs a s, subs r s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon(name, tyArgs) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TyCon(name, tyArgs &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&amp;gt; List.map (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; subs x s))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Environments&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; TyScheme = TyScheme &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Type * Set&amp;lt;string&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Env = Env &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Map&amp;lt;string, TyScheme&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Calculate the list of type variables occurring in a type,&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// without repeats&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// getTVarsOfType: Type -&amp;gt; Set&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; getTVarsOfType t = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; t &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar n&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Set.singleton n&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyLam(t1, t2) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; getTVarsOfType(t1) + getTVarsOfType(t2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon(_, args) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List.fold (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; acc t &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; acc + getTVarsOfType t) Set.empty args&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// getTVarsOfScheme: TyScheme -&amp;gt; Set&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getTVarsOfScheme (TyScheme (t, tvars)) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(getTVarsOfType t) - tvars&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// getTVarsOfEnv: Env -&amp;gt; Set&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getTVarsOfEnv (Env e) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; schemes = e |&amp;gt; Map.toSeq |&amp;gt; Seq.map snd&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Seq.fold (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; acc s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; acc + (getTVarsOfScheme s)) Set.empty schemes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Unification&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;exception&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; UnificationError &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Type * Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Calculate the most general unifier of two types, &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// raising a UnificationError if there isn't one &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// mgu: Type -&amp;gt; Type -&amp;gt; Subst -&amp;gt; Subst&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; mgu a b s =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; (subs a s, subs b s) &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar ta, TyVar tb &lt;span style="color: #00aaff;"&gt;when&lt;/span&gt; ta = tb &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar ta, _ &lt;span style="color: #00aaff;"&gt;when&lt;/span&gt; not &amp;lt;| Set.contains ta (getTVarsOfType b) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; extend ta b s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;| _, TyVar _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; mgu b a s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyLam (a1, b1), TyLam (a2, b2) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; mgu a1 a2 (mgu b1 b2 s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon(name1, args1), TyCon(name2, args2) &lt;span style="color: #00aaff;"&gt;when&lt;/span&gt; name1 = name2 &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(s, args1, args2) |||&amp;gt; List.fold2 (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; subst t1 t2 &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; mgu t1 t2 subst)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| x,y &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; raise &amp;lt;| UnificationError (x,y) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// State Monad&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; State&amp;lt;'state, 'a&amp;gt; = State &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; ('state &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;'a * 'state)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; run (State f) s = f s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; StateMonad() = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.Bind(State m, f) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="color: #00aaff;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; let&lt;/span&gt; (v,s') = m s &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (State n) = f v &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; n s')&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.Return x = State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x, s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.ReturnFrom x = x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.Zero () = State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (), s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.Combine(r1, r2) = b.Bind(r1, &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; () &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; r2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; b.Delay f = State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; run (f()) s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; state = StateMonad()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getState = State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; s, s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; setState s = State (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (), s)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; execute m s = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; m &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| State f &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; r = f s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; r &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|(x,_) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; mmap f xs = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; MMap' (f, xs', out) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;state { &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; xs' &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| h :: t &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; h' = f(h)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; MMap'(f, t, List.append out [h'])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| [] &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; out }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MMap' (f, xs, [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Alpha converter (Converts T4, T5, T6 to 'a, 'b, 'c)&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getName k =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; containsKey k = state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (map, id) = getState&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; Map.containsKey k map }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; addName k = state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (map, id) = getState&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; newid = char (int id + 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;do!&lt;/span&gt; setState(Map.add k id map, newid) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; () }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; success = containsKey k&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; (not success) &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;do!&lt;/span&gt; addName k&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (map, id) = getState&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; Map.find k map }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// renameTVarsToLetters: Type -&amp;gt; Type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; renameTVarsToLetters t =&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; run x = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;state {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyVar(name) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; newName = getName name&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; TyVar(sprintf &lt;span style="color: maroon;"&gt;"'%c"&lt;/span&gt; newName)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyLam(arg, res) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; t1 = run arg&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; t2 = run res&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; TyLam(t1, t2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| TyCon(name, typeArgs) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; list = mmap (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; run x) typeArgs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; TyCon(name, list) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;execute (run t) (Map.empty, &lt;span style="color: maroon;"&gt;'a'&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ****************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Calculate principal Type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ****************************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; newTyVar = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; x = getState&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;do!&lt;/span&gt; setState(x + 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; TyVar(sprintf &lt;span style="color: maroon;"&gt;"T%d"&lt;/span&gt; x) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; integerCon = TyCon(&lt;span style="color: maroon;"&gt;"int"&lt;/span&gt;, [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; floatCon = TyCon(&lt;span style="color: maroon;"&gt;"float"&lt;/span&gt;, [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; charCon = TyCon(&lt;span style="color: maroon;"&gt;"char"&lt;/span&gt;, [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; stringCon = TyCon(&lt;span style="color: maroon;"&gt;"string"&lt;/span&gt;, [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; litToTy lit = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; lit &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Integer _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; integerCon&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Float _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; floatCon&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Char _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; charCon&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| String&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;_ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; stringCon&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Calculate the principal type scheme for an expression in a given &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// typing environment &lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// tp: Env -&amp;gt; Exp -&amp;gt; Type -&amp;gt; Subst -&amp;gt; State&amp;lt;int, Subst&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; tp env exp bt s = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; findSc n (Env e) = Map.find n e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; containsSc n (Env e) = Map.containsKey n e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; addSc n sc (Env e) = Env (Map.add n sc e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;state {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; exp &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Lit v &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; mgu (litToTy v) bt s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Var n &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; not (containsSc n env) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; failwith &lt;span style="color: maroon;"&gt;"Name %s no found"&lt;/span&gt; n &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (TyScheme (t, _)) = findSc n env&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; mgu (subs t s) bt s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Lam (x, e) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; a = newTyVar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; b = newTyVar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; s1 = mgu bt (TyLam (a, b)) s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; newEnv = addSc x (TyScheme (a, Set.empty)) env&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; tp newEnv e b s1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| App(e1, e2) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; a = newTyVar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; s1 = tp env e1 (TyLam(a, bt)) s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; tp env e2 a s1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| InfixApp(e1, op, e2) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; exp1 = App(App(Var op, e1), e2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; tp env exp1 bt s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Let(name, inV, body) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; a = newTyVar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; s1 = tp env inV a s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; t = subs a s1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; newScheme = TyScheme (t, ((getTVarsOfType t) - (getTVarsOfEnv env)))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; tp (addSc name newScheme env) body bt s1 }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; predefinedEnv = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Env([&lt;span style="color: maroon;"&gt;"+"&lt;/span&gt;, TyScheme (TyLam(integerCon, TyLam(integerCon, integerCon)), Set.empty)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: maroon;"&gt;"*"&lt;/span&gt;, TyScheme (TyLam(integerCon, TyLam(integerCon, integerCon)), Set.empty)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: maroon;"&gt;"-"&lt;/span&gt;, TyScheme (TyLam(integerCon, TyLam(integerCon, integerCon)), Set.empty)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;] |&amp;gt; Map.ofList)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// typeOf: Exp -&amp;gt; Type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; typeOf exp =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; typeOf' exp = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;state { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (a:Type) = newTyVar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; emptySubst = Subst (Map.empty)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; s1 = tp predefinedEnv exp a emptySubst&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; subs a s1 }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; execute (typeOf' exp) 0 |&amp;gt; renameTVarsToLetters&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ***********************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Example&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// ***********************************************************&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; composeAst = Let(&lt;span style="color: maroon;"&gt;"compose"&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Lam(&lt;span style="color: maroon;"&gt;"f"&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Lam(&lt;span style="color: maroon;"&gt;"g"&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Lam (&lt;span style="color: maroon;"&gt;"x"&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;App(Var &lt;span style="color: maroon;"&gt;"g"&lt;/span&gt;, App(Var &lt;span style="color: maroon;"&gt;"f"&lt;/span&gt;, Var &lt;span style="color: maroon;"&gt;"x"&lt;/span&gt;))))), &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Var &lt;span style="color: maroon;"&gt;"compose"&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; t = typeOf composeAst&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;printfn &lt;span style="color: maroon;"&gt;"%s"&lt;/span&gt; (t.ToString())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/2Qjb2Xy4pQY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/8022437158719122058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=8022437158719122058" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/8022437158719122058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/8022437158719122058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/2Qjb2Xy4pQY/hindley-milner-type-inference-sample.html" title="Hindley Milner Type Inference Sample Implementation" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/08/hindley-milner-type-inference-sample.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NSXk9cSp7ImA9WxFUEEg.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-945893425614090526</id><published>2010-06-20T19:36:00.000+01:00</published><updated>2010-06-20T19:36:38.769+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-20T19:36:38.769+01:00</app:edited><title>Subsequences of a seq&lt;'a&gt;</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; cons x xs = seq { &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield!&lt;/span&gt; xs }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (|Empty|Cons|) xs : Choice&amp;lt;Unit, 'a * seq&amp;lt;'a&amp;gt;&amp;gt; =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; (Seq.isEmpty xs) &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Empty &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;else&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cons(Seq.head xs, Seq.skip 1 xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; subseq xs = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; xs &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Empty &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; seq[seq[]]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Cons(x,xs) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; subseq = subseq xs &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Seq.append (Seq.map (cons x) subseq) subseq &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; FsCheck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; MyGenerators =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; Seq() =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; fsList = Arb.Default.FsList()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Arbitrary&amp;lt;seq&amp;lt;'a&amp;gt;&amp;gt;() &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;override&lt;/span&gt; x.Generator = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gen.resize 10 (Gen.map (List.toSeq) (fsList.Generator))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;override&lt;/span&gt; x.Shrinker t = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Seq.map (List.toSeq) (fsList.Shrinker(Seq.toList t)) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;ignore (Arb.register&amp;lt;MyGenerators&amp;gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; xs &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (Seq.length (subseq xs) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int (Math.Pow(2.0, (float (Seq.length xs))))))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/rKZT_DKCsxg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/945893425614090526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=945893425614090526" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/945893425614090526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/945893425614090526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/rKZT_DKCsxg/subsequences-of-seq.html" title="Subsequences of a seq&lt;'a&gt;" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/06/subsequences-of-seq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CSXoyeSp7ImA9WxFVGUQ.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-6553265015274074408</id><published>2010-06-19T20:07:00.001+01:00</published><updated>2010-06-20T01:47:48.491+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-20T01:47:48.491+01:00</app:edited><title>Factorial using only Algebraic Data Types and Pattern Matching</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Nat = Zero | Succ &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Nat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; one = Succ Zero&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; two = Succ (Succ Zero)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; three = Succ (Succ (Succ Zero))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; add x y = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Zero &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; y&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Succ x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Succ (add x y)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; mul x y = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; y &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Zero &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Zero&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Succ Zero &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Succ y &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; add x (mul x y)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; fac n = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; n &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Zero &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Succ Zero&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Succ x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; mul n (fac x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; FsCheck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Addition properties&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x y &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (add x y) = (add y x))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x y z &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (add x (add y z)) = (add (add x y) z))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (add x Zero) = x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// Multiplication properties&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x y &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (mul x y) = (mul y x))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x y z &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (mul x (mul y z)) = (mul (mul x y) z))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Check.Quick (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (mul x one) = x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/HlagqOzw31U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/6553265015274074408/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=6553265015274074408" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6553265015274074408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6553265015274074408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/HlagqOzw31U/factorial-using-only-abstract-data.html" title="Factorial using only Algebraic Data Types and Pattern Matching" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/06/factorial-using-only-abstract-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMQXk4fip7ImA9WxFQE0k.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-4572561277658027070</id><published>2010-05-08T19:56:00.005+01:00</published><updated>2010-05-08T20:03:00.736+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-08T20:03:00.736+01:00</app:edited><title>Composing Contracts Part 4: Sample Usage</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
Composing contracts: an adventure in financial engineering&lt;br /&gt;
&lt;a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/financial-contracts/contracts-icfp.htm"&gt;http://research.microsoft.com/en-us/um/people/simonpj/papers/financial-contracts/contracts-icfp.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ContractDataTypes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Contracts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; t1 = Date(DateTime.Today.AddSeconds(10.0))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;// zero-coupon bond&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; c1 = zcb t1 10.0 USD&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ret = eval c1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;ret.Subscribe(printf &lt;span style="color: maroon;"&gt;"%A"&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;Console.ReadLine ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/WJ5EBVp_Ju0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/4572561277658027070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=4572561277658027070" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/4572561277658027070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/4572561277658027070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/WJ5EBVp_Ju0/composing-contracts-part-4-sample-usage.html" title="Composing Contracts Part 4: Sample Usage" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/05/composing-contracts-part-4-sample-usage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MNQHY-eyp7ImA9WxFQE0k.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-3021107071752534187</id><published>2010-05-08T19:07:00.001+01:00</published><updated>2010-05-08T20:04:51.853+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-08T20:04:51.853+01:00</app:edited><title>Composing Contracts Part 3: Sample Implementation</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;module&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Contracts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ContractDataTypes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; date s = Date (DateTime.Parse s)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; one c = One c&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; scale k c = Scale(k, c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; konst x = rx { &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; x }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (==*) l r = rx { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; x = l&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; y = r&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; x = y }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; obsTime = rx { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; x = Observable.Interval(TimeSpan.FromSeconds(1.0))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; Date(DateTime.Today.AddSeconds (float x)) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; at t = obsTime ==* (konst t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; cWhen t c = When (t, c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt; line-height: 115%; mso-ansi-language: EN-GB; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;// zero-coupon bond&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; zcb t x k = cWhen (at t) (scale (konst x) (one k))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; eval c = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; c &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | When (t, c) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; rx { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; x = t&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;then&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; (eval c)&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Scale (k, c) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; rx { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; x = k&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; y = eval c&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; x * y }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | One c &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; c &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | GBP &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; rx { &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; Money (1.0, GBP) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | USD &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; rx { &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; Money (0.675310643, GBP) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/x5PXZSCD7mY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/3021107071752534187/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=3021107071752534187" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3021107071752534187?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3021107071752534187?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/x5PXZSCD7mY/composing-contracts-part-3-sample.html" title="Composing Contracts Part 3: Sample Implementation" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/05/composing-contracts-part-3-sample.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFQH06fSp7ImA9WxFQE0k.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-147794292514245204</id><published>2010-05-08T19:00:00.005+01:00</published><updated>2010-05-08T20:05:11.315+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-08T20:05:11.315+01:00</app:edited><title>Composing Contracts Part 2: Signatures</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;module&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Contracts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ContractDataTypes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; date: String &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; one : Currency &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; scale : IObservable&amp;lt;double&amp;gt; &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; konst : 'a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;'a&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (==*) : IObservable&amp;lt;'a&amp;gt; &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;'a&amp;gt; &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;bool&amp;gt; &lt;span style="color: #00aaff;"&gt;when&lt;/span&gt; 'a : equality&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; obsTime : IObservable&amp;lt;Date&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; at: Date &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;bool&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; cWhen: IObservable&amp;lt;bool&amp;gt; &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt; line-height: 115%; mso-ansi-language: EN-GB; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;// zero-coupon bond&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; zcb : Date &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Double &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Currency &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Contract &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;val&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; eval: Contract &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;Money&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/M0uH7XXR0sA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/147794292514245204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=147794292514245204" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/147794292514245204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/147794292514245204?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/M0uH7XXR0sA/composing-contracts-part-2-signatures.html" title="Composing Contracts Part 2: Signatures" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/05/composing-contracts-part-2-signatures.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08NQXs5eSp7ImA9WxFQE0k.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-3607577435554835130</id><published>2010-05-08T18:57:00.002+01:00</published><updated>2010-05-08T19:04:50.521+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-08T19:04:50.521+01:00</app:edited><title>Composing Contracts Part 1: Data Types</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;module&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; ContractDataTypes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Date = Date &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; DateTime&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Days = Days &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; TimeSpan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Currency = GBP | USD&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Money = Money &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; float * Currency&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; (*) (k, Money (v, c)) = Money (k * v, c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Contract = | One &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; Currency&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Scale &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; (IObservable&amp;lt;double&amp;gt; * Contract)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | When &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; (IObservable&amp;lt;bool&amp;gt; * Contract)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; RxBuilder() =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Bind(m:IObservable&amp;lt;'a&amp;gt;, f:'a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; IObservable&amp;lt;'b&amp;gt;) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.SelectMany(m, &lt;span style="color: #00aaff;"&gt;new&lt;/span&gt; Func&amp;lt;'a, IObservable&amp;lt;'b&amp;gt;&amp;gt; (f))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Return x = Observable.Return x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.ReturnFrom x = x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Zero() = Observable.Empty()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; rx = RxBuilder()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/150ZrJ3y_RM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/3607577435554835130/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=3607577435554835130" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3607577435554835130?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3607577435554835130?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/150ZrJ3y_RM/composing-contracts-part-1-data-types.html" title="Composing Contracts Part 1: Data Types" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/05/composing-contracts-part-1-data-types.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMFRXg8fyp7ImA9WxFRGUo.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-2908153366623495700</id><published>2010-05-04T01:46:00.008+01:00</published><updated>2010-05-04T12:43:34.677+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-04T12:43:34.677+01:00</app:edited><title>Monad State Transformer</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-size: 13px;"&gt;&lt;span style="color: #999999;"&gt;This is an attempt to write a State Monad Transformer. &lt;br /&gt;
I haven't been able to make it generic and according to &lt;br /&gt;
&lt;strong&gt;Brian McNamara "this will never be possible in any .NET language"&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-size: 13px;"&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://cs.hubfs.net/forums/thread/13974.aspx"&gt;http://cs.hubfs.net/forums/thread/13974.aspx&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; StateT&amp;lt;'a, 'b, 'state&amp;gt; = StateT &lt;span style="color: #00aaff;"&gt;of&lt;/span&gt; ('state &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Parser&amp;lt;'a * 'state, 'b&amp;gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;type&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; StateTBuilder (p:ParserMonad) =&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// a -&amp;gt; m a&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Return a = StateT (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; p.Return(a, s))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//&amp;nbsp; m a -&amp;gt; (a -&amp;gt; m b) -&amp;gt; m b&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; this.Bind (m, f) =&amp;nbsp; StateT (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; p {&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (v, s') = &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (StateT f) = m &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; f s&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (StateT f') = f v&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return!&lt;/span&gt; f' s' })&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span class="Apple-style-span" style="font-family: Consolas; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; statefulParser = StateTBuilder(parser)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; getState = StateT (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; parser.Return(s, s))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; setState s = StateT (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; parser.Return((), s))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; lift c = StateT (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; s &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; parser.Bind (c, (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; parser.Return (x, s))))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Execute m s = &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (StateT f) = m &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser { &lt;span style="color: #00aaff;"&gt;let!&lt;/span&gt; (x,_) = f s &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-layout-grid-align: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; x&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/bcUyYRrm62A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/2908153366623495700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=2908153366623495700" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/2908153366623495700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/2908153366623495700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/bcUyYRrm62A/monad-state-transformer.html" title="Monad State Transformer" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/05/monad-state-transformer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GSHwzeSp7ImA9WxFREUs.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-7542025182507802821</id><published>2010-04-25T03:01:00.001+01:00</published><updated>2010-04-25T03:02:09.281+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T03:02:09.281+01:00</app:edited><title>SplitAt (Alternate definition)</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; splitAt n xs = &lt;span style="color: #00aaff;"&gt;match&lt;/span&gt; (n, xs) &lt;span style="color: #00aaff;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0, xs &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ([], xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _, [] &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ([], [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | n, x::xs &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (xs', xs'') = splitAt (n - 1) xs &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (x::xs', xs'')&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/CUvECSO7yIM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/7542025182507802821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=7542025182507802821" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7542025182507802821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7542025182507802821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/CUvECSO7yIM/splitat-alternate-definition.html" title="SplitAt (Alternate definition)" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/04/splitat-alternate-definition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCRnk6eSp7ImA9WxFSGUU.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-7337023735809903916</id><published>2010-04-23T01:05:00.001+01:00</published><updated>2010-04-23T01:06:07.711+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-23T01:06:07.711+01:00</app:edited><title>C# SplitEvery</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;private&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; SplitEvery&amp;lt;T&amp;gt;(&lt;span style="color: #00aaff;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; xs, &lt;span style="color: #00aaff;"&gt;int&lt;/span&gt; n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; xs.Unfold(ys =&amp;gt; ys.Take(n), ys =&amp;gt; ys.Any(), ys =&amp;gt; ys.Skip(n));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;private&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; Unfold&amp;lt;T&amp;gt;(&lt;span style="color: #00aaff;"&gt;this&lt;/span&gt; T x, &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, T&amp;gt; h, &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="color: #00aaff;"&gt;bool&lt;/span&gt;&amp;gt; p, &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, T&amp;gt; t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;for&lt;/span&gt; (&lt;span style="color: #00aaff;"&gt;var&lt;/span&gt; i = x; p(i); i = t(i))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; h(i);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/kXPYlGHLKCM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/7337023735809903916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=7337023735809903916" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7337023735809903916?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7337023735809903916?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/kXPYlGHLKCM/c-splitevery.html" title="C# SplitEvery" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/04/c-splitevery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNRno5fSp7ImA9WxFSGUU.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-7300711024936151758</id><published>2010-04-23T00:51:00.001+01:00</published><updated>2010-04-23T00:51:37.425+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-23T00:51:37.425+01:00</app:edited><title>SplitEvery (New version, no explicit recursion)</title><content type="html">&lt;span class="Apple-style-span" style="color: green; font-family: Consolas; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; repeat x = Seq.initInfinite (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; scan = Seq.scan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; iterate f x = scan (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; l _ &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; f l) x (repeat x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; any = Enumerable.Any&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; take n = &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; xs &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Enumerable.Take (xs, n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; skip n = &lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; xs &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; Enumerable.Skip (xs, n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; unfold h p t =&amp;nbsp; iterate t &amp;gt;&amp;gt; Seq.takeWhile p &amp;gt;&amp;gt; Seq.map h&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; splitAt n = unfold (take n) any (skip n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/ZuIhBm5mwLY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/7300711024936151758/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=7300711024936151758" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7300711024936151758?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7300711024936151758?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/ZuIhBm5mwLY/splitevery-new-version-no-explicit.html" title="SplitEvery (New version, no explicit recursion)" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/04/splitevery-new-version-no-explicit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDR308eCp7ImA9WxFSEk4.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-6012237389699041401</id><published>2010-04-13T20:39:00.006+01:00</published><updated>2010-04-14T09:04:36.370+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-14T09:04:36.370+01:00</app:edited><title>C# Permutations (using Rx System.Interactive)</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; Permutations&amp;lt;T&amp;gt;(&lt;span style="color: #00aaff;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; xs)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;if&lt;/span&gt; (!xs.Any())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;EnumerableEx&lt;/span&gt;.Return(&lt;span style="color: #2b91af;"&gt;Enumerable&lt;/span&gt;.Empty&amp;lt;T&amp;gt;());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;else&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;return&lt;/span&gt; &lt;span style="color: #00aaff;"&gt;from&lt;/span&gt; zs &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; Permutations(xs.Skip(1))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;from&lt;/span&gt; i &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Enumerable&lt;/span&gt;.Range(0, zs.Count() + 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;select&lt;/span&gt; zs.Take(i).Concat(&lt;span style="color: #2b91af;"&gt;EnumerableEx&lt;/span&gt;.Return(xs.First())).Concat(zs.Skip(i));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/YALg16ffbYY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/6012237389699041401/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=6012237389699041401" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6012237389699041401?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/6012237389699041401?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/YALg16ffbYY/c-permutations-using-rx.html" title="C# Permutations (using Rx System.Interactive)" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/04/c-permutations-using-rx.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IEQHcyeCp7ImA9WxFSEEw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-3653672442031263536</id><published>2010-04-11T20:49:00.001+01:00</published><updated>2010-04-11T20:51:41.990+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-11T20:51:41.990+01:00</app:edited><title>Permutations</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; length = Seq.length&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; take = Seq.take&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; skip = Seq.skip&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (++) = Seq.append&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; concat = Seq.concat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; map = Seq.map&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; (|Empty|Cons|) (xs:seq&amp;lt;'a&amp;gt;) : Choice&amp;lt;Unit, 'a * seq&amp;lt;'a&amp;gt;&amp;gt; = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;;"&gt;if&lt;/span&gt; (Seq.isEmpty xs) &lt;span style="color: #00aaff;;"&gt;then&lt;/span&gt; Empty &lt;span style="color: #00aaff;;"&gt;else&lt;/span&gt; Cons(Seq.head xs, Seq.skip 1 xs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; interleave x ys = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; seq { &lt;span style="color: #00aaff;;"&gt;for&lt;/span&gt; i &lt;span style="color: #00aaff;;"&gt;in&lt;/span&gt; [0..length ys] &lt;span style="color: #00aaff;;"&gt;-&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (take i ys) ++ seq [x] ++ (skip i ys) }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff;; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;;"&gt;rec&lt;/span&gt; permutations xs = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;;"&gt;match&lt;/span&gt; xs &lt;span style="color: #00aaff;;"&gt;with&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Empty &lt;span style="color: #00aaff;;"&gt;-&amp;gt;&lt;/span&gt; seq [seq []]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Cons(x,xs) &lt;span style="color: #00aaff;;"&gt;-&amp;gt;&lt;/span&gt; concat(map (interleave x) (permutations xs))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/S3IVtt80Efk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/3653672442031263536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=3653672442031263536" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3653672442031263536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/3653672442031263536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/S3IVtt80Efk/permutations.html" title="Permutations" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/04/permutations.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04CQ3wyeSp7ImA9WxFSEEw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-132712390774571685</id><published>2010-03-30T01:09:00.003+01:00</published><updated>2010-04-11T20:59:22.291+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-11T20:59:22.291+01:00</app:edited><title>Generic Monadic Map and Join using statically resolved type variables</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;inline&lt;/span&gt; mapM b f m =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; unit x&amp;nbsp;&amp;nbsp;&amp;nbsp; = (^x: (&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; Return: ^b &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ^n) b, x)&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (&amp;gt;&amp;gt;=) m f = (^x: (&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; Bind: ^m &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (^a &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ^n) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ^n) b, m, f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m &amp;gt;&amp;gt;= (&lt;span style="color: #00aaff;"&gt;fun&lt;/span&gt; x &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; unit (f x))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;inline&lt;/span&gt; joinM b m =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (&amp;gt;&amp;gt;=) m f = (^x: (&lt;span style="color: #00aaff;"&gt;member&lt;/span&gt; Bind: ^m &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; (^n &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ^n) &lt;span style="color: #00aaff;"&gt;-&amp;gt;&lt;/span&gt; ^n) b, m, f)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m &amp;gt;&amp;gt;= id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/n6be447EXos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/132712390774571685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=132712390774571685" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/132712390774571685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/132712390774571685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/n6be447EXos/generic-monadic-map-and-join-using.html" title="Generic Monadic Map and Join using statically resolved type variables" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/03/generic-monadic-map-and-join-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ERXY8eip7ImA9WxFSEEw.&quot;"><id>tag:blogger.com,1999:blog-3459037735648203218.post-7058207947168316068</id><published>2010-03-12T17:43:00.003Z</published><updated>2010-04-11T21:15:04.872+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-11T21:15:04.872+01:00</app:edited><title>SplitEvery (chunk)</title><content type="html">&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Collections.Generic&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;open&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Linq&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;//splitEvery :: Int -&amp;gt; [a] -&amp;gt; [[a]]&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; splitAt n (xs:IEnumerable&amp;lt;'a&amp;gt;) = (xs.Take n, xs.Skip n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: #00aaff; font-family: Consolas; font-size: 9.5pt;"&gt;let&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #00aaff;"&gt;rec&lt;/span&gt; splitEvery n xs =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;let&lt;/span&gt; (ks, vs) = splitAt n xs &lt;span style="color: #00aaff;"&gt;in&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; seq { &lt;span style="color: #00aaff;"&gt;yield&lt;/span&gt; ks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #00aaff;"&gt;yield!&lt;/span&gt; splitEvery n vs }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FCode/~4/GFvwP1QTD9E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://fsharpcode.blogspot.com/feeds/7058207947168316068/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3459037735648203218&amp;postID=7058207947168316068" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7058207947168316068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3459037735648203218/posts/default/7058207947168316068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FCode/~3/GFvwP1QTD9E/splitevery-chunk.html" title="SplitEvery (chunk)" /><author><name>holoed</name><uri>http://www.blogger.com/profile/06023475066034907250</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_4Kcp1lWqgrQ/STbrRBx_7qI/AAAAAAAAAAM/k0VUwVq7w2o/S220/calvin.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://fsharpcode.blogspot.com/2010/03/splitevery-chunk.html</feedburner:origLink></entry></feed>
