<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Sharp Things</title><link>http://blogs.msdn.com/b/jomo_fisher/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Use FsLex and FsYacc to make a parser in F#</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/06/15/use-fslex-and-fsyacc-to-make-a-parser-in-f.aspx</link><pubDate>Tue, 15 Jun 2010 22:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10025446</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=10025446</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/06/15/use-fslex-and-fsyacc-to-make-a-parser-in-f.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;em&gt;Update: The template I posted yesterday was for PowerPack 1.9.9.9 which is not the most recent version available. I have since updated the template to target PowerPack 2.0.0.0. If you installed the old template you may need to uninstall at Tools\Extension Manager...&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;em&gt;-----------------------------&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;Jomo Fisher&amp;mdash;F# is excellent for parsing text and creating new languages. The F# PowerPack contains two tools&amp;mdash;FsLex.exe and FsYacc.exe&amp;mdash;to create powerful lexers and parsers. However, it isn&amp;rsquo;t so easy to configure a Visual Studio project correctly to use these tools. To help with this, I made a project template that you can use to get started quickly. Just follow these quick steps:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;1)&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Download the F# PowerPack from &lt;/span&gt;&lt;/span&gt;&lt;a href="http://fsharppowerpack.codeplex.com/releases"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-family: Calibri; color: #0000ff; font-size: small;"&gt;here&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;2)&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;In VS2010, go to File\New Project. Select &amp;lsquo;Online Templates&amp;rsquo; and search for &amp;lsquo;F# Parsed&amp;rsquo; (or my name).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-40-08-metablogapi/4314.LexYacc.png"&gt;&lt;img height="376" width="760" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-40-08-metablogapi/2744.LexYacc_5F00_thumb.png" alt="LexYacc" border="0" title="LexYacc" class="wlDisabledImage" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600" id="_x0000_t75"&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;stroke joinstyle="miter"&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;stroke&gt;&lt;/stroke&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="sum @0 1 0"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="sum 0 0 @1"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @2 1 2"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @3 21600 pixelWidth"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @3 21600 pixelHeight"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="sum @0 0 1"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @6 1 2"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @7 21600 pixelWidth"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="sum @8 21600 0"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="prod @7 21600 pixelHeight"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f eqn="sum @10 21600 0"&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;f&gt;&lt;/f&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;&lt;formulas&gt;&lt;/formulas&gt;
&lt;path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;
&lt;path&gt;&lt;/path&gt;&lt;lock aspectratio="t" v:ext="edit"&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;lock&gt;&lt;/lock&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shapetype&gt;&lt;/shapetype&gt;&lt;shape type="#_x0000_t75" o:spid="_x0000_i1025" id="Picture_x0020_7" style="width: 468pt; height: 230.25pt; visibility: visible; mso-wrap-style: square;"&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;imagedata o:title="o:title" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;imagedata&gt;&lt;/imagedata&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;shape&gt;&lt;/shape&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;The starter project implements a simple calculator language that you can grow into a more sophisticated Domain Specific Language or text processing application.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; color: #000000; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN" style="mso-ansi-language: en"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Credit goes to Matt Valerio and Brian McNamara for figuring out the details and to Don Syme for making the calculator language that this is based on. Bugs and omissions are probably my fault. &lt;span lang="EN" style="mso-ansi-language: en"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Please let me know what you think, and whether you have any issues or spot any bugs that I should address.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN" style="font-family: 'Calibri','sans-serif'; color: black; mso-ansi-language: en"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN" style="font-family: 'Calibri','sans-serif'; color: black; mso-ansi-language: en"&gt;&lt;span style="font-size: small;"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="font-family: 'Arial','sans-serif'; color: #333333; font-size: 9pt; mso-ansi-language: en"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10025446" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/FsYacc/">FsYacc</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Yacc/">Yacc</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/PowerPack/">PowerPack</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/FsLex/">FsLex</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Lex/">Lex</category></item><item><title>Creating an OData Web Service with F#</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/28/creating-an-odata-web-service-with-f.aspx</link><pubDate>Sat, 29 May 2010 00:17:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10017183</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=10017183</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/28/creating-an-odata-web-service-with-f.aspx#comments</comments><description>&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; font-size: 9pt; mso-ansi-language: en" lang="EN"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;     &lt;p style="line-height: 13.5pt; margin: 0in 0in 0pt; background: white" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;&lt;font size="3"&gt;Jomo Fisher—I’ve spent a little time looking at the &lt;/font&gt;&lt;a href="http://www.odata.org/"&gt;&lt;b&gt;&lt;span style="color: purple"&gt;&lt;u&gt;&lt;font size="3"&gt;OData Web Service Protocol&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;font size="3"&gt;. There is quite a lot to like about it. It is an open, REST-ful format for communicating with a web service as if it were a database. You can query an OData service with LINQ.           &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="line-height: normal; margin: 0in 0in 0pt; background: white; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;&lt;font size="3"&gt;To help me learn about it I set out to write a simple OData web service. I expected to have to do quite a lot of work because OData is very rich and just parsing the urls, &lt;/font&gt;&lt;a href="http://www.odata.org/developers/protocols/uri-conventions"&gt;&lt;b&gt;&lt;span style="color: purple"&gt;&lt;u&gt;&lt;font size="3"&gt;which can contain SQL-like queries&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;font size="3"&gt;, looked to be hard work.&amp;#160; &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="line-height: normal; margin: 0in 0in 0pt; background: white; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;It turned out, however, to be pretty straight-forward. You basically just need to implement &lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;IDataServiceQueryProvider&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt; and &lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: black; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;IDataServiceMetadataProvider&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;. &lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;All the heavy-lifting in terms of parsing is done for you. You get a nice System.Linq Expression which is easy to deal with (mainly because my service uses LINQ to Objects under the covers).           &lt;p&gt;&lt;/p&gt;         &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="line-height: normal; margin: 0in 0in 0pt; background: white; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;&lt;font size="3"&gt; If you’d like to take a look at the service I wrote, I published it on Visual Studio Gallery. You just need to go to File\New Project in Visual Studio 2010:           &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="line-height: 13.5pt; margin: 0in 0in 0pt; background: white" class="MsoNormal"&gt;&lt;/p&gt;   &lt;/span&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;       &lt;p&gt;&lt;font color="#000000" size="3"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: 13.5pt; background: white"&gt;&lt;/p&gt; &lt;/span&gt;  &lt;p&gt;   &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-40-08-metablogapi/1778.odata_5F00_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="odata" border="0" alt="odata" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-40-08-metablogapi/3438.odata_5F00_thumb.png" width="755" height="383" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p style="line-height: 13.5pt; background: white"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; font-size: 11pt; mso-ansi-language: en" lang="EN"&gt;Please let me know what you think, and whether you have any issues or spot any bugs.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;span style="font-family: calibri; font-size: small"&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10017183" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/OData/">OData</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/LINQ/">LINQ</category></item><item><title>F# Object Oriented Programming</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/26/f-object-oriented-programming.aspx</link><pubDate>Wed, 26 May 2010 22:44:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10015957</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=10015957</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/26/f-object-oriented-programming.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher—F# has a functional heritage but it is actually very good at OO as well.&amp;#160; Here’s an example of its nice, clean syntax for declaring a class:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:169a54ab-1a9d-4042-9a81-a0ddc38f01ea" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; Vector(x : float, y : float) =&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;member&lt;/span&gt; this.X = x&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;member&lt;/span&gt; this.Y = y&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Tim Ng posted a &lt;a href="http://blogs.msdn.com/b/timng/archive/2010/04/06/f-quick-guides-object-oriented-programming.aspx"&gt;nice comparison&lt;/a&gt; of F# to C# for OO language features. If you’re a C# programmer interested in F#, this is a great place to start.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;span style="font-family: calibri; font-size: small"&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10015957" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/C_2300_/">C#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>How to Enumerate all WMI Classes</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/25/how-to-enumerate-all-wmi-classes.aspx</link><pubDate>Tue, 25 May 2010 17:08:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10014868</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=10014868</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/25/how-to-enumerate-all-wmi-classes.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span lang="EN" style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Jomo Fisher&amp;mdash;Quick sample today. I&amp;rsquo;m mainly posting this because it took me a while to figure it out and I hope it might save someone some time. This is the F# code you would useto enumerate all WMI classes on your system and show the properties of each. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;of each. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6e251c52-520f-4809-8d5c-4990d104021e" style="margin: 0px; display: inline; float: none; padding: 0px;"&gt;
&lt;div style="font-family: 'Courier New', Courier, Monospace; color: #000; font-size: 10pt; border: #000080 1px solid;"&gt;
&lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: Verdana, Tahoma, Arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ddd; max-height: 300px; overflow: auto;"&gt;&lt;ol style="padding-bottom: 0px; margin: 0px 0px 0px 2.5em; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px;"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;// WalkWmiTypes.fsx&lt;/span&gt; &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;// Enumerate all WMI types on the local machine and show their property names and types.&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;#r&lt;/span&gt; &lt;span style="color: #800000;"&gt;"System.Management"&lt;/span&gt; &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;open&lt;/span&gt; System.Management &lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;let&lt;/span&gt; scope = ManagementScope(&lt;span style="color: #800000;"&gt;"\\\\localhost\\root\\cimv2"&lt;/span&gt;) &lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;let&lt;/span&gt; path = ManagementPath(&lt;span style="color: #800000;"&gt;""&lt;/span&gt;) &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;let&lt;/span&gt; mclass = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ManagementClass(scope, path, ObjectGetOptions()) &lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;let&lt;/span&gt; options = EnumerationOptions() &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;options.EnumerateDeep &amp;lt;- &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; obj &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; mclass.GetSubclasses(options) &lt;span style="color: #0000ff;"&gt;do&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printfn &lt;span style="color: #800000;"&gt;"%s"&lt;/span&gt; (obj.ToString().Split(&lt;span style="color: #800000;"&gt;':'&lt;/span&gt;).[1]) &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; prop &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; obj.Properties &lt;span style="color: #0000ff;"&gt;do&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printfn &lt;span style="color: #800000;"&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%s:%A"&lt;/span&gt; prop.Name prop.Type &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span lang="EN" style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri;"&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span lang="EN" style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This is pure .NET, so it should be easily translatable to C# and VB. Let me know if you run into problems with that. The result looks like:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bb1d6a7f-f7c4-4238-a4b0-1717fe504be7" style="margin: 0px; display: inline; float: none; padding: 0px;"&gt;
&lt;div style="font-family: 'Courier New', Courier, Monospace; color: #000; font-size: 10pt; border: #000080 1px solid;"&gt;
&lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: Verdana, Tahoma, Arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px;"&gt;Output&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="padding-bottom: 0px; margin: 0px; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px;"&gt;
&lt;li&gt;Msft_WmiProvider_DeleteClassAsyncEvent_Post &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ClassName:String &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Flags:UInt32 &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HostingGroup:String &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HostingSpecification:UInt32 &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Locale:String &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace:String &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectParameter:Object &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;provider:String &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResultCode:UInt32 &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SECURITY_DESCRIPTOR:UInt8 &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringParameter:String &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TIME_CREATED:UInt64 &lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransactionIdentifer:String &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;User:String &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span lang="EN" style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span lang="EN" style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10014868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category></item><item><title>F# Destroys Invading Aliens</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/18/f-destroys-invading-aliens.aspx</link><pubDate>Thu, 18 Mar 2010 15:50:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9981213</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9981213</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/18/f-destroys-invading-aliens.aspx#comments</comments><description>&lt;p&gt;Wow, check out Chris’s StarCraft bot in F#: &lt;a href="http://blogs.msdn.com/chrsmith/archive/2010/03/18/writing-a-starcraft-bot-in-f.aspx"&gt;http://blogs.msdn.com/chrsmith/archive/2010/03/18/writing-a-starcraft-bot-in-f.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9981213" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>F# Team is Hiring a Cross-Platform Developer</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/15/f-team-is-hiring-a-cross-platform-developer.aspx</link><pubDate>Mon, 15 Mar 2010 20:29:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9979006</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9979006</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/15/f-team-is-hiring-a-cross-platform-developer.aspx#comments</comments><description>&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;     &lt;p&gt;&lt;font color="#000000" size="3" face="Calibri"&gt;We’re hiring a developer to help advance our cross-platform presence. Please do send and application if this looks like a good match for you.&lt;/font&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;     &lt;p&gt;&lt;font color="#000000" size="3" face="Calibri"&gt;From Don Syme’s blog:&lt;/font&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0pt 0.5in" class="MsoNormal"&gt;&lt;font color="#000000"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 14pt; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;Contract Position in the F# Team: Compiler and Visual Tools Software Engineer for Cross-Platform F# &lt;/span&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 14pt; mso-ansi-language: en-gb; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN-GB"&gt;&lt;shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;stroke joinstyle="miter"&gt;&lt;/stroke&gt;&lt;formulas&gt;&lt;f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/f&gt;&lt;f eqn="sum @0 1 0"&gt;&lt;/f&gt;&lt;f eqn="sum 0 0 @1"&gt;&lt;/f&gt;&lt;f eqn="prod @2 1 2"&gt;&lt;/f&gt;&lt;f eqn="prod @3 21600 pixelWidth"&gt;&lt;/f&gt;&lt;f eqn="prod @3 21600 pixelHeight"&gt;&lt;/f&gt;&lt;f eqn="sum @0 0 1"&gt;&lt;/f&gt;&lt;f eqn="prod @6 1 2"&gt;&lt;/f&gt;&lt;f eqn="prod @7 21600 pixelWidth"&gt;&lt;/f&gt;&lt;f eqn="sum @8 21600 0"&gt;&lt;/f&gt;&lt;f eqn="prod @7 21600 pixelHeight"&gt;&lt;/f&gt;&lt;f eqn="sum @10 21600 0"&gt;&lt;/f&gt;&lt;/formulas&gt;&lt;path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/path&gt;&lt;lock aspectratio="t" v:ext="edit"&gt;&lt;/lock&gt;&lt;/shapetype&gt;&lt;shape style="width: 4.5pt; height: 9pt" id="Picture_x0020_1" alt="http://blogs.msdn.com/Themes/default/images/common/star-left-off.gif" type="#_x0000_t75" o:spid="_x0000_i1025"&gt;&lt;imagedata o:href="cid:image001.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 3.75pt; height: 9pt" id="Picture_x0020_2" alt="http://blogs.msdn.com/Themes/default/images/common/star-right-off.gif" type="#_x0000_t75" o:spid="_x0000_i1026"&gt;&lt;imagedata o:href="cid:image002.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 4.5pt; height: 9pt" id="Picture_x0020_3" alt="http://blogs.msdn.com/Themes/default/images/common/star-left-off.gif" type="#_x0000_t75" o:spid="_x0000_i1027"&gt;&lt;imagedata o:href="cid:image001.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 3.75pt; height: 9pt" id="Picture_x0020_4" alt="http://blogs.msdn.com/Themes/default/images/common/star-right-off.gif" type="#_x0000_t75" o:spid="_x0000_i1028"&gt;&lt;imagedata o:href="cid:image002.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 4.5pt; height: 9pt" id="Picture_x0020_5" alt="http://blogs.msdn.com/Themes/default/images/common/star-left-off.gif" type="#_x0000_t75" o:spid="_x0000_i1029"&gt;&lt;imagedata o:href="cid:image001.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 3.75pt; height: 9pt" id="Picture_x0020_6" alt="http://blogs.msdn.com/Themes/default/images/common/star-right-off.gif" type="#_x0000_t75" o:spid="_x0000_i1030"&gt;&lt;imagedata o:href="cid:image002.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 4.5pt; height: 9pt" id="Picture_x0020_7" alt="http://blogs.msdn.com/Themes/default/images/common/star-left-off.gif" type="#_x0000_t75" o:spid="_x0000_i1031"&gt;&lt;imagedata o:href="cid:image001.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 3.75pt; height: 9pt" id="Picture_x0020_8" alt="http://blogs.msdn.com/Themes/default/images/common/star-right-off.gif" type="#_x0000_t75" o:spid="_x0000_i1032"&gt;&lt;imagedata o:href="cid:image002.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 4.5pt; height: 9pt" id="Picture_x0020_9" alt="http://blogs.msdn.com/Themes/default/images/common/star-left-off.gif" type="#_x0000_t75" o:spid="_x0000_i1033"&gt;&lt;imagedata o:href="cid:image001.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;shape style="width: 3.75pt; height: 9pt" id="Picture_x0020_10" alt="http://blogs.msdn.com/Themes/default/images/common/star-right-off.gif" type="#_x0000_t75" o:spid="_x0000_i1034"&gt;&lt;imagedata o:href="cid:image002.gif@01CAC020.2FEDCAC0" src="file:///C:\Users\jomof\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"&gt;&lt;/imagedata&gt;&lt;/shape&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 14pt; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-left: 0.5in"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;We are now seeking applications for a contract position with the F# team!       &lt;p&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 0.5in"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;Contract length: 9 months – 1 year       &lt;br /&gt;Hiring Group: Microsoft Research, Cambridge        &lt;br /&gt;Location: Cambridge UK. Remote working possible.         &lt;p&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 0.5in"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;F# is a cross-platform language executing on any CLI implementation, including those found on Windows, Mac OS/X, Linux, Silverlight, XBox 360 and mobile phones. We are seeking a talented and highly motivated software engineer with experience in compilers and/or visual tools to make targeted improvements to the support the execution, development and tools experience across these platforms. Other tasks will include working with implementors of these CLI implementations, preparing web hosted material, preparing components for shared and open source release, working directly with communities interested in using F# across multiple platforms, including universities, and preparing demonstration applications for the use of F# across platforms.       &lt;p&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 0.5in"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;The ideal candidate would have a passion for the F# language, strong .NET programming skills, knowledge of web design and programming, and knowledge of several of the above platforms. Experience in authoring parts of a compiler and/or interactive development environment would also be helpful, as would experience in open source development. The candidate will have the opportunity to work as part of the F# team in Cambridge UK, and a portion of remote working would also be considered.       &lt;p&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 0.5in"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;Please send applications to Don Syme (&lt;/font&gt;&lt;a href="mailto:dsyme@microsoft.com"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;dsyme@microsoft.com&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font color="#000000"&gt;), or Ruth Lenton (&lt;/font&gt;&lt;a href="mailto:ruth.lenton@microsoft.com"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ruth.lenton@microsoft.com&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font color="#000000"&gt;)&amp;#160;&amp;#160; &lt;p&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;&lt;a href="http://blogs.msdn.com/dsyme/archive/2010/03/10/contract-position-in-the-f-team-compiler-and-visual-tools-software-engineer-for-cross-platform-f.aspx"&gt;&lt;u&gt;&lt;font color="#800080" size="3" face="Calibri"&gt;http://blogs.msdn.com/dsyme/archive/2010/03/10/contract-position-in-the-f-team-compiler-and-visual-tools-software-engineer-for-cross-platform-f.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="mso-ansi-language: en-gb" lang="EN-GB"&gt;   &lt;p mce_keep="true"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;span style="font-family: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;; font-size: 12pt; mso-ansi-language: en; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;" lang="EN"&gt; &lt;/span&gt;          &lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;       &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9979006" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>Neat Samples: MEF in F# Scripts</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/10/neat-samples-f-in-mef-scripts.aspx</link><pubDate>Wed, 10 Mar 2010 18:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9976377</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9976377</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/10/neat-samples-f-in-mef-scripts.aspx#comments</comments><description>&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 12pt; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;FONT face=Calibri&gt;Jomo Fisher—I &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/09/neat-samples-extend-your-f-program-with-mef.aspx#comments" mce_href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/09/neat-samples-extend-your-f-program-with-mef.aspx#comments"&gt;&lt;U&gt;&lt;FONT color=#800080 face=Calibri&gt;posted yesterday&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; about using MEF in F# programs. In the comments &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: en" lang=EN&gt;&lt;FONT color=#000000&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Oldrich asked if it was possible to do the same thing in F# scripts. It is indeed possible. It actually looks like a really powerful combination because you can naturally extend your scripts just by adding new #load directives at the top. 
&lt;P mce_keep="true"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: en" lang=EN&gt;&lt;FONT color=#000000&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;There are three pieces to this sample. You have to break your interfaces out into a separate .fsx. Realistically, you’d probably do this in a real compiled F# program too so this isn’t a huge burden on simplicity. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:992d8796-c415-48fe-8392-f743539a4b41 class=wlWriterEditableSmartContent&gt;
&lt;DIV style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: 'Courier New', Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; FONT-FAMILY: Verdana, Tahoma, Arial, sans-serif; BACKGROUND: #000080; COLOR: #fff; FONT-WEIGHT: bold; PADDING-TOP: 2px"&gt;Code Snippet&lt;/DIV&gt;
&lt;DIV style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;OL style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #008000"&gt;// MefInterfaces.fsx&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #008000"&gt;// Expose an interface&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;type&lt;/SPAN&gt; ITastyTreat =&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #0000ff"&gt;abstract&lt;/SPAN&gt; Description : string&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: en" lang=EN&gt;
&lt;P&gt;&lt;FONT color=#000000 size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:73ecdb27-1d1a-4e52-af8e-ef0275ac5a5a class=wlWriterEditableSmartContent&gt;
&lt;DIV style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: 'Courier New', Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; FONT-FAMILY: Verdana, Tahoma, Arial, sans-serif; BACKGROUND: #000080; COLOR: #fff; FONT-WEIGHT: bold; PADDING-TOP: 2px"&gt;Code Snippet&lt;/DIV&gt;
&lt;DIV style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;OL style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2.5em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #008000"&gt;// ChocolateCookie.fsx&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#r&lt;/SPAN&gt; &lt;SPAN style="COLOR: #800000"&gt;"System.ComponentModel.Composition"&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#load&lt;/SPAN&gt; &lt;SPAN style="COLOR: #800000"&gt;"MefInterfaces.fsx"&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; ChocolateCookie&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; MefInterfaces&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; System.ComponentModel.Composition&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;/LI&gt;
&lt;LI&gt;[&amp;lt;Export(typeof&amp;lt;ITastyTreat&amp;gt;)&amp;gt;]&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;type&lt;/SPAN&gt; ChocolateCookie() = &lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; ITastyTreat &lt;SPAN style="COLOR: #0000ff"&gt;with&lt;/SPAN&gt; &lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #0000ff"&gt;member&lt;/SPAN&gt; __.Description = &lt;SPAN style="COLOR: #800000"&gt;"a delicious chocolate cookie"&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: en" lang=EN&gt;
&lt;P&gt;&lt;FONT color=#000000 size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:89f36069-536b-4c15-a3a7-c4569a8a810e class=wlWriterEditableSmartContent&gt;
&lt;DIV style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: 'Courier New', Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; FONT-FAMILY: Verdana, Tahoma, Arial, sans-serif; BACKGROUND: #000080; COLOR: #fff; FONT-WEIGHT: bold; PADDING-TOP: 2px"&gt;Code Snippet&lt;/DIV&gt;
&lt;DIV style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;OL style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2.5em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #008000"&gt;// MefHost.fsx&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#load&lt;/SPAN&gt; &lt;SPAN style="COLOR: #800000"&gt;"ChocolateCookie.fsx"&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; System.Reflection&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; System.IO&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; System.ComponentModel.Composition&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; System.ComponentModel.Composition.Hosting&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;open&lt;/SPAN&gt; MefInterfaces&lt;/LI&gt;
&lt;LI&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #008000"&gt;// Set up MEF&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;let&lt;/SPAN&gt; catalog = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; AggregateCatalog()&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;let&lt;/SPAN&gt; assemblyCatalog = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; AssemblyCatalog(Assembly.GetExecutingAssembly())&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;let&lt;/SPAN&gt; container = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; CompositionContainer(catalog)&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;catalog.Catalogs.Add(assemblyCatalog)&lt;/LI&gt;
&lt;LI&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #008000"&gt;// Jar that will contain tasty treats&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="COLOR: #0000ff"&gt;type&lt;/SPAN&gt; TreatJar() = &lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;lt;ImportMany(typeof&amp;lt;ITastyTreat&amp;gt;)&amp;gt;] &lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #0000ff"&gt;let&lt;/SPAN&gt; cookies : seq&amp;lt;ITastyTreat&amp;gt; = &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #0000ff"&gt;member&lt;/SPAN&gt; __.EatTreats() =&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cookies |&amp;gt; Seq.iter(&lt;SPAN style="COLOR: #0000ff"&gt;fun&lt;/SPAN&gt; tt&lt;SPAN style="COLOR: #0000ff"&gt;-&amp;gt;&lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: #800000"&gt;"Yum, it was a %s"&lt;/SPAN&gt; tt.Description)&lt;/LI&gt;
&lt;LI&gt;&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;let&lt;/SPAN&gt; jar = TreatJar()&lt;/LI&gt;
&lt;LI&gt;container.ComposeParts(jar)&lt;/LI&gt;
&lt;LI style="BACKGROUND: #f3f3f3"&gt;jar.EatTreats()&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang=EN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang=EN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Thanks Oldrich, for giving me an excuse to try this out. 
&lt;P mce_keep="true"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="COLOR: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang=EN&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-ansi-language: en; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000000 size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9976377" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/MEF/">MEF</category></item><item><title>Neat Samples: Extend your F# program with MEF</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/09/neat-samples-extend-your-f-program-with-mef.aspx</link><pubDate>Wed, 10 Mar 2010 00:32:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9975902</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9975902</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/09/neat-samples-extend-your-f-program-with-mef.aspx#comments</comments><description>&lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Jomo Fisher—The Managed Extensibility Framework is an interesting new technology in .NET 4.0. It lets you set up a plug in system for your application so that your program can acquire new functionality just by, for example, adding a .dll into a particular directory.           &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;This is a simple example in F#. This code sets up MEF hosting and asks for all extensions in the c:\extensions folder.           &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:61e441c8-8456-44e7-8220-421c24862b50" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// Host.fs&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// A MEF host that eats tasty treats&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Reflection&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.IO&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.ComponentModel.Composition&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.ComponentModel.Composition.Hosting&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Expose an interface&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; ITastyTreat =&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;abstract&lt;/span&gt; Description : string&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Set up MEF&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; catalog = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; AggregateCatalog()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; directoryCatalog = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; DirectoryCatalog(&lt;span style="color:#800000"&gt;@&amp;quot;c:&amp;#92;Extensions&amp;quot;&lt;/span&gt;,&lt;span style="color:#800000"&gt;&amp;quot;*.dll&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; container = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; CompositionContainer(catalog)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;catalog.Catalogs.Add(directoryCatalog)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Jar that will contain tasty treats&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; TreatJar() = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    [&amp;lt;ImportMany(typeof&amp;lt;ITastyTreat&amp;gt;)&amp;gt;] &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; cookies : seq&amp;lt;ITastyTreat&amp;gt; = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;member&lt;/span&gt; __.EatTreats() =&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        cookies |&amp;gt; Seq.iter(&lt;span style="color:#0000ff"&gt;fun&lt;/span&gt; tt&lt;span style="color:#0000ff"&gt;-&amp;gt;&lt;/span&gt;printfn &lt;span style="color:#800000"&gt;&amp;quot;Yum, it was a %s&amp;quot;&lt;/span&gt; tt.Description)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; jar = TreatJar()&lt;/li&gt; &lt;li&gt;container.ComposeParts(jar)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;jar.EatTreats()&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;This is how you implement an extension. Just build this into a .dll and drop it in the c:\extensions directory.           &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:baec95df-f323-434e-815a-75c7e47901fb" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;namespace&lt;/span&gt; ChocolateCookie&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; Host&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.ComponentModel.Composition&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;[&amp;lt;Export(typeof&amp;lt;ITastyTreat&amp;gt;)&amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; ChocolateCookie() = &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;interface&lt;/span&gt; ITastyTreat &lt;span style="color:#0000ff"&gt;with&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#0000ff"&gt;member&lt;/span&gt; __.Description = &lt;span style="color:#800000"&gt;&amp;quot;a delicious chocolate cookie&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font size="3" face="Calibri"&gt;Now, if you run the host program you should see this:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;   &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: black; mso-ansi-language: en" lang="EN"&gt;&lt;font size="3"&gt;Yum, it was a a delicious chocolate cookie         &lt;br /&gt;Press any key to continue . . .&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en" lang="EN"&gt;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;/p&gt;   &lt;span style="color: black; mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font size="3" face="Calibri"&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9975902" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/MEF/">MEF</category></item><item><title>Neat Samples: F#, Freebase and DGML</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-samples-f-freebase-and-dgml.aspx</link><pubDate>Sat, 06 Mar 2010 21:37:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9974205</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9974205</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-samples-f-freebase-and-dgml.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher – I recently posted about the freebase web service &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/06/neat-sample-f-and-freebase.aspx"&gt;here&lt;/a&gt;. This sample reads biological classifications and renders them in DGML. The result is a huge graph, here’s a little piece of it:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/NeatSamplesFFreebaseandDGML_BF92/animals_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="animals" border="0" alt="animals" src="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/NeatSamplesFFreebaseandDGML_BF92/animals_thumb_1.png" width="553" height="311" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e1471be7-8008-4f6c-a0fd-281220d676d3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// FreebaseDgml.fsx &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Example of reading from freebase.com in F# using DataContract and JSON serializer and write the result&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// in .dgml format.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// by Jomo Fisher &lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Runtime.Serialization&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.ServiceModel.Web&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Web&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Xml&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li&gt;  &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.IO &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Net &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Text &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Web &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Collections.Generic&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Security.Authentication &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Runtime.Serialization &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;[&amp;lt;DataContract&amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; Result&amp;lt;&amp;#39;TResult&amp;gt; = { &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;code&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Code:string &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Result:&amp;#39;TResult &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;message&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Message:string &lt;/li&gt; &lt;li&gt;    } &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;[&amp;lt;DataContract&amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; Classification = { &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Name:string &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;higher_classification&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    HigherClassification:string &lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;lower_classifications&amp;quot;&lt;/span&gt;) &amp;gt;] &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    LowerClassifications:string array&lt;/li&gt; &lt;li&gt;    } &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; Query&amp;lt;&amp;#39;T&amp;gt;(query:string) : &amp;#39;T = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; query = query.Replace(&lt;span style="color:#800000"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;,&lt;span style="color:#800000"&gt;&amp;quot;&amp;#92;&amp;quot;&amp;quot;&lt;/span&gt;) &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; queryUrl = sprintf &lt;span style="color:#800000"&gt;&amp;quot;http://api.freebase.com/api/service/mqlread?query=%s&amp;quot;&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;{&amp;#92;&amp;quot;query&amp;#92;&amp;quot;:&amp;quot;&lt;/span&gt;+query+&lt;span style="color:#800000"&gt;&amp;quot;}&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; request : HttpWebRequest = &lt;span style="color:#0000ff"&gt;downcast&lt;/span&gt; WebRequest.Create(queryUrl) &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    request.Method &amp;lt;- &lt;span style="color:#800000"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li&gt;    request.ContentType &amp;lt;- &lt;span style="color:#800000"&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; response = request.GetResponse() &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; result = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#0000ff"&gt;try&lt;/span&gt; &lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff"&gt;use&lt;/span&gt; reader = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; StreamReader(response.GetResponseStream()) &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            reader.ReadToEnd(); &lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff"&gt;finally&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            response.Close() &lt;/li&gt; &lt;li&gt;  &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; data = Encoding.Unicode.GetBytes(result); &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; stream = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; MemoryStream() &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    stream.Write(data, 0, data.Length); &lt;/li&gt; &lt;li&gt;    stream.Position &amp;lt;- 0L &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;     &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; ser = Json.DataContractJsonSerializer(typeof&amp;lt;Result&amp;lt;&amp;#39;T&amp;gt;&amp;gt;) &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; result = ser.ReadObject(stream) :?&amp;gt; Result&amp;lt;&amp;#39;T&amp;gt; &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; result.Code&amp;lt;&amp;gt;&lt;span style="color:#800000"&gt;&amp;quot;/api/status/ok&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;then&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        raise (InvalidOperationException(result.Message)) &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;else&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        result.Result &lt;/li&gt; &lt;li&gt;  &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; classifications = Query&amp;lt;Classification array&amp;gt;(&lt;span style="color:#800000"&gt;&amp;quot;[{&amp;#39;type&amp;#39;:&amp;#39;/biology/organism_classification&amp;#39;,&amp;#39;name&amp;#39;:null,&amp;#39;higher_classification&amp;#39;:null,&amp;#39;lower_classifications&amp;#39;:[]}]&amp;quot;&lt;/span&gt;) &lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; sb = StringBuilder()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;  &lt;/li&gt; &lt;li&gt;sb.Append(&lt;span style="color:#800000"&gt;&amp;quot;&amp;lt;DirectedGraph xmlns=&amp;#39;http://schemas.microsoft.com/vs/2009/dgml&amp;#39;&amp;gt;&amp;#92;n&amp;quot;&lt;/span&gt;) |&amp;gt; ignore&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;sb.Append(&lt;span style="color:#800000"&gt;&amp;quot; &amp;lt;Links&amp;gt;&amp;#92;n&amp;quot;&lt;/span&gt;) |&amp;gt; ignore&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;for&lt;/span&gt; classification &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; classifications &lt;span style="color:#0000ff"&gt;do&lt;/span&gt; &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; classification.LowerClassifications&amp;lt;&amp;gt;&lt;span style="color:#0000ff"&gt;null&lt;/span&gt; &lt;span style="color:#0000ff"&gt;then&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#0000ff"&gt;for&lt;/span&gt; lower &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; classification.LowerClassifications &lt;span style="color:#0000ff"&gt;do&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            sb.AppendFormat(&lt;span style="color:#800000"&gt;&amp;quot;  &amp;lt;Link Source=&amp;#92;&amp;quot;{0}&amp;#92;&amp;quot; Target=&amp;#92;&amp;quot;{1}&amp;#92;&amp;quot;/&amp;gt;&amp;#92;n&amp;quot;&lt;/span&gt;,classification.Name,lower) |&amp;gt; ignore&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;sb.Append(&lt;span style="color:#800000"&gt;&amp;quot; &amp;lt;/Links&amp;gt;&amp;#92;n&amp;quot;&lt;/span&gt;) |&amp;gt; ignore&lt;/li&gt; &lt;li&gt;sb.Append(&lt;span style="color:#800000"&gt;&amp;quot;&amp;lt;/DirectedGraph&amp;gt;&amp;#92;n&amp;quot;&lt;/span&gt;) |&amp;gt; ignore&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;printfn &lt;span style="color:#800000"&gt;&amp;quot;%s&amp;quot;&lt;/span&gt; (sb.ToString()) &lt;span style="color:#008000"&gt;// Paste the results of this into a .dgml file.           &lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;T&lt;span style="color: black"&gt;his posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9974205" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/JSON/">JSON</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Freebase/">Freebase</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category></item><item><title>Neat Sample: F# and Bing API</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-sample-f-and-bing-api.aspx</link><pubDate>Sat, 06 Mar 2010 20:32:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9974177</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9974177</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-sample-f-and-bing-api.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher – I recently posted an &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/06/neat-sample-f-and-freebase.aspx"&gt;sample of calling the Freebase web service with F#.&lt;/a&gt; Here’s another F# web service sample. This one uses the Bing Phone API to do a query. This time the code uses Xml instead of JSON and XmlDocument instead of a DataContract deserializer. This is pretty much a straight transliteration of one of the Bing SDK samples.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d5a126f2-c1ac-4458-8035-cb508db70ef7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// BingPhone.fsx&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// An example of using the a Bing web service API from F#&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// by Jomo Fisher&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Net&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Xml&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; appId = &lt;span style="color:#800000"&gt;&amp;quot;your app id goes here&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; BuildRequest() : HttpWebRequest  = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; requestString = &lt;/li&gt; &lt;li&gt;        &lt;span style="color:#800000"&gt;&amp;quot;http://api.bing.net/xml.aspx?&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#008000"&gt;// Common request fields (required)&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;AppId=&amp;quot;&lt;/span&gt; + appId&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Query=microsoft offices&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Sources=Phonebook&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            &lt;span style="color:#008000"&gt;// Common request fields (optional)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Version=2.0&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Market=en-us&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;UILanguage=en&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Latitude=47.603450&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Longitude=-122.329696&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Radius=10.0&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            &lt;span style="color:#008000"&gt;// Phonebook-specific request fields (optional)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Phonebook.Count=10&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Phonebook.Offset=0&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Phonebook.FileType=YP&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            + &lt;span style="color:#800000"&gt;&amp;quot;&amp;amp;Phonebook.SortBy=Distance&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#008000"&gt;// Create and initialize the request.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;downcast&lt;/span&gt; HttpWebRequest.Create(requestString)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; DisplayErrors(errors:XmlNodeList) = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#008000"&gt;// Iterate over the list of errors and display error details.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    printfn &lt;span style="color:#800000"&gt;&amp;quot;Errors:&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;for&lt;/span&gt; error &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; errors &lt;span style="color:#0000ff"&gt;do&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff"&gt;for&lt;/span&gt; detail &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; error.ChildNodes &lt;span style="color:#0000ff"&gt;do&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            printfn &lt;span style="color:#800000"&gt;&amp;quot;%s: %s&amp;quot;&lt;/span&gt; detail.Name detail.InnerText&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; DisplayResults( root:XmlNode, nsmgr:XmlNamespaceManager) = &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// Add the Phonebook SourceType namespace to the namespace manager.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    nsmgr.AddNamespace(&lt;span style="color:#800000"&gt;&amp;quot;pho&amp;quot;&lt;/span&gt;, &lt;span style="color:#800000"&gt;&amp;quot;http://schemas.microsoft.com/LiveSearch/2008/04/XML/phonebook&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; phonebook = root.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Phonebook&amp;quot;&lt;/span&gt;, nsmgr)&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; results = phonebook.SelectNodes(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Results/pho:PhonebookResult&amp;quot;&lt;/span&gt;,nsmgr)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; version = root.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./@Version&amp;quot;&lt;/span&gt;, nsmgr).InnerText&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; searchTerms = root.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./api:Query/api:SearchTerms&amp;quot;&lt;/span&gt;,nsmgr).InnerText&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; _,offset = System.Int32.TryParse(phonebook.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Offset&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; _,total =  System.Int32.TryParse(phonebook.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Total&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#008000"&gt;// Display the results header.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    printfn &lt;span style="color:#800000"&gt;&amp;quot;Bing API Version %s&amp;quot;&lt;/span&gt; version&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    printfn &lt;span style="color:#800000"&gt;&amp;quot;Phonebook results for %s&amp;quot;&lt;/span&gt; searchTerms&lt;/li&gt; &lt;li&gt;    printfn &lt;span style="color:#800000"&gt;&amp;quot;Displaying %d to %d of %d results&amp;quot;&lt;/span&gt; (offset + 1) (offset + results.Count) total&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// Display the Phonebook results.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; builder = System.Text.StringBuilder();&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;for&lt;/span&gt; result &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; results &lt;span style="color:#0000ff"&gt;do&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        builder.Length &amp;lt;- 0&lt;/li&gt; &lt;li&gt;        builder&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            .AppendLine(result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Business&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li&gt;            .AppendLine(result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:Address&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            .Append(result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:City&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li&gt;            .Append(&lt;span style="color:#800000"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;)|&amp;gt;ignore&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; stateOrProvince = result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:StateOrProvince&amp;quot;&lt;/span&gt;, nsmgr).InnerText&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        builder&lt;/li&gt; &lt;li&gt;            .AppendLine(stateOrProvince)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            .AppendLine(result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:PhoneNumber&amp;quot;&lt;/span&gt;, nsmgr).InnerText)&lt;/li&gt; &lt;li&gt;            .Append(&lt;span style="color:#800000"&gt;&amp;quot;Average Rating: &amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            .AppendLine(result.SelectSingleNode(&lt;span style="color:#800000"&gt;&amp;quot;./pho:UserRating&amp;quot;&lt;/span&gt;, nsmgr).InnerText)|&amp;gt;ignore&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        printfn &lt;span style="color:#800000"&gt;&amp;quot;%s&amp;quot;&lt;/span&gt; (builder.ToString())&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; DisplayResponse(response:HttpWebResponse) = &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// Load the response into an XmlDocument.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; document = XmlDocument()&lt;/li&gt; &lt;li&gt;    document.Load(response.GetResponseStream());&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// Add the default namespace to the namespace manager.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; nsmgr = XmlNamespaceManager(document.NameTable);&lt;/li&gt; &lt;li&gt;    nsmgr.AddNamespace(&lt;span style="color:#800000"&gt;&amp;quot;api&amp;quot;&lt;/span&gt;,&lt;span style="color:#800000"&gt;&amp;quot;http://schemas.microsoft.com/LiveSearch/2008/04/XML/element&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; errors = document.DocumentElement.SelectNodes(&lt;span style="color:#800000"&gt;&amp;quot;./api:Errors/api:Error&amp;quot;&lt;/span&gt;, nsmgr)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; errors.Count &amp;gt; 0 &lt;span style="color:#0000ff"&gt;then&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#008000"&gt;// There are errors in the response. Display error details.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        DisplayErrors(errors);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#008000"&gt;// There were no errors in the response. Display the&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#008000"&gt;// Phonebook results.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        DisplayResults(document.DocumentElement, nsmgr);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; request = BuildRequest()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// Send the request; display the response.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; response = request.GetResponse()&lt;/li&gt; &lt;li&gt;    DisplayResponse(&lt;span style="color:#0000ff"&gt;downcast&lt;/span&gt; response)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;with&lt;/span&gt; ex &lt;span style="color:#0000ff"&gt;-&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;// An exception occurred while accessing the network.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    printfn &lt;span style="color:#800000"&gt;&amp;quot;%s&amp;quot;&lt;/span&gt; ex.Message&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;As before, let me know if there are other F# samples you’d like to see.&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;T&lt;span style="color: black"&gt;his posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9974177" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Neat+Samples/">Neat Samples</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Xml/">Xml</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Bing/">Bing</category></item><item><title>Neat Sample: F# and Freebase</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-sample-f-and-freebase.aspx</link><pubDate>Sat, 06 Mar 2010 18:20:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9974149</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9974149</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/03/06/neat-sample-f-and-freebase.aspx#comments</comments><description>&lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;Jomo Fisher – The web service at Freebase.com lets you access all sorts of structured data from a web service. Here’s a sample that shows you how to access this data from F#. It uses DataContract and the JSON serializer.&lt;/span&gt;&lt;span style="font-family: consolas; color: green; font-size: 9.5pt"&gt; &lt;font color="#000000" size="3" face="Calibri"&gt;The code below reads and prints the elements of the periodic table.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: green; font-size: 9.5pt"&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-family: consolas; font-size: 9.5pt"&gt;   &lt;p&gt;&lt;/p&gt;   &lt;span style="font-family: consolas; font-size: 9.5pt"&gt;     &lt;p&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/span&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c2d08f98-14dc-44d3-88e1-cccc9035b36b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// Freebase.fsx &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Example of reading from freebase.com in F# using DataContract and JSON serializer&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// by Jomo Fisher&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Runtime.Serialization&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.ServiceModel.Web&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Web&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;#r&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;System.Xml&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.IO&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Net &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Text &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Web&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Security.Authentication &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;open&lt;/span&gt; System.Runtime.Serialization&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;[&amp;lt;DataContract&amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; Result&amp;lt;&amp;#39;TResult&amp;gt; = {&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;code&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Code:string&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Result:&amp;#39;TResult&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;message&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Message:string&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;[&amp;lt;DataContract&amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;type&lt;/span&gt; ChemicalElement = {&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    Name:string&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;boiling_point&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    BoilingPoint:string&lt;/li&gt; &lt;li&gt;    [&amp;lt;field: DataMember(Name=&lt;span style="color:#800000"&gt;&amp;quot;atomic_mass&amp;quot;&lt;/span&gt;) &amp;gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    AtomicMass:string&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; Query&amp;lt;&amp;#39;T&amp;gt;(query:string) : &amp;#39;T =&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; query = query.Replace(&lt;span style="color:#800000"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;,&lt;span style="color:#800000"&gt;&amp;quot;&amp;#92;&amp;quot;&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; queryUrl = sprintf &lt;span style="color:#800000"&gt;&amp;quot;http://api.freebase.com/api/service/mqlread?query=%s&amp;quot;&lt;/span&gt; &lt;span style="color:#800000"&gt;&amp;quot;{&amp;#92;&amp;quot;query&amp;#92;&amp;quot;:&amp;quot;&lt;/span&gt;+query+&lt;span style="color:#800000"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; request : HttpWebRequest = &lt;span style="color:#0000ff"&gt;downcast&lt;/span&gt; WebRequest.Create(queryUrl)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    request.Method &amp;lt;- &lt;span style="color:#800000"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    request.ContentType &amp;lt;- &lt;span style="color:#800000"&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; response = request.GetResponse()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; result = &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#0000ff"&gt;try&lt;/span&gt; &lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff"&gt;use&lt;/span&gt; reader = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; StreamReader(response.GetResponseStream())&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            reader.ReadToEnd(); &lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff"&gt;finally&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            response.Close()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; data = Encoding.Unicode.GetBytes(result);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; stream = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; MemoryStream()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    stream.Write(data, 0, data.Length);&lt;/li&gt; &lt;li&gt;    stream.Position &amp;lt;- 0L&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; ser = Json.DataContractJsonSerializer(typeof&amp;lt;Result&amp;lt;&amp;#39;T&amp;gt;&amp;gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;let&lt;/span&gt; result = ser.ReadObject(stream) :?&amp;gt; Result&amp;lt;&amp;#39;T&amp;gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; result.Code&amp;lt;&amp;gt;&lt;span style="color:#800000"&gt;&amp;quot;/api/status/ok&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;then&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        raise (InvalidOperationException(result.Message))&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;else&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        result.Result&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;let&lt;/span&gt; elements = Query&amp;lt;ChemicalElement array&amp;gt;(&lt;span style="color:#800000"&gt;&amp;quot;[{&amp;#39;type&amp;#39;:&amp;#39;/chemistry/chemical_element&amp;#39;,&amp;#39;name&amp;#39;:null,&amp;#39;boiling_point&amp;#39;:null,&amp;#39;atomic_mass&amp;#39;:null}]&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;elements |&amp;gt; Array.iter(&lt;span style="color:#0000ff"&gt;fun&lt;/span&gt; element&lt;span style="color:#0000ff"&gt;-&amp;gt;&lt;/span&gt;printfn &lt;span style="color:#800000"&gt;&amp;quot;%A&amp;quot;&lt;/span&gt; element)&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-ansi-language: en" lang="EN"&gt;Let me know if there are other F# samples you’d like to see.&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri" lang="EN"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;T&lt;span style="color: black"&gt;his posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9974149" width="1" height="1"&gt;</description></item><item><title>F# February 2010 Release is out</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2010/02/11/f-february-2010-release-is-out.aspx</link><pubDate>Thu, 11 Feb 2010 16:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9962011</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9962011</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2010/02/11/f-february-2010-release-is-out.aspx#comments</comments><description>&lt;P&gt;Don just put the announcement up: &lt;A href="http://blogs.msdn.com/dsyme/archive/2010/02/10/announcing-the-f-february-2010-release.aspx"&gt;http://blogs.msdn.com/dsyme/archive/2010/02/10/announcing-the-f-february-2010-release.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This is the version we've been using internally for a month or so and it is really polished and working nicely. Download it and give it a try. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9962011" width="1" height="1"&gt;</description></item><item><title>F# Scripting, .NET 4.0 and Mixed-mode assemblies</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2009/11/17/f-scripting-net-4-0-and-mixed-mode-assemblies.aspx</link><pubDate>Tue, 17 Nov 2009 20:32:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9923826</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=9923826</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2009/11/17/f-scripting-net-4-0-and-mixed-mode-assemblies.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher—There is a nice F# and DirectX demo that has been floating around for a while now. A recent version can be found here: &lt;a href="http://code.msdn.microsoft.com/fsharpsamples/Wiki/View.aspx?title=Home&amp;amp;version=2"&gt;http://code.msdn.microsoft.com/fsharpsamples/Wiki/View.aspx?title=Home&amp;amp;version=2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One of the recent problems we’ve seen is that, because of the support for side-by-side runtimes, .NET 4.0 has changed the way that it binds to older mixed-mode assemblies. These assemblies are, for example, those that are compiled from C++\CLI. Currently available DirectX assemblies are mixed mode. If you see a message like this then you know you have run into the issue:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Though you may see it in the F# interactive, this message originates as an exception in the .NET 4.0 runtime. You may also see the message if you recompile a C#, VB or F# application that uses DirectX or other mixed-mode assembly against the .NET 4.0 runtime.&lt;/p&gt;  &lt;p&gt;The good news for applications is that you have the option of falling back to .NET 2.0 era binding for these assemblies by setting an app.config flag like so:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: #333333; font-size: 11pt; mso-ansi-language: en-us; mso-fareast-font-family: calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: en-us; mso-bidi-language: ar-sa"&gt;&amp;#160; &amp;lt;startup useLegacyV2RuntimeActivationPolicy=&amp;quot;true&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;supportedRuntime version=&amp;quot;v4.0&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;/startup&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Things get a little trickier for scripts, though, since there is no .exe running. Here is a little snippet of code you can run in the F# repl to switch to 2.0 binding mode:&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;     &lt;p&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9.5pt"&gt;open&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt; System         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9.5pt"&gt;open&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt; System.Runtime.InteropServices         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9.5pt"&gt;open&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt; System.Runtime.CompilerServices         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;       &lt;p&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt;[&amp;lt;ComImport&amp;gt;]         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt;[&amp;lt;InterfaceType(ComInterfaceType.InterfaceIsIUnknown)&amp;gt;]         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt;[&amp;lt;Guid(&lt;/font&gt;&lt;span style="color: maroon"&gt;&amp;quot;BD39D1D2-BA2F-486A-89B0-B4B0CB466891&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;)&amp;gt;]         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9.5pt"&gt;type&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt; ICLRRuntimeInfo =         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;// vtable slots&lt;/span&gt;        &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xGetVersionString : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit          &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xGetRuntimeDirectory : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xIsLoaded : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xIsLoadable : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xLoadErrorString : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xLoadLibrary : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xGetProcAddress : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xGetInterface : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xSetDefaultStartupFlags : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; xGetDefaultStartupFlags : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;[&amp;lt;MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)&amp;gt;]          &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;abstract&lt;/span&gt;&lt;font color="#000000"&gt; BindAsLegacyV2Runtime : unit &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; unit         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;       &lt;p&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9.5pt"&gt;let&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt; rtInfo = RuntimeEnvironment.GetRuntimeInterfaceAsObject(Guid.Empty,typeof&amp;lt;ICLRRuntimeInfo&amp;gt;.GUID) :?&amp;gt; ICLRRuntimeInfo&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 9.5pt"&gt;&lt;font color="#000000"&gt;rtInfo.BindAsLegacyV2Runtime()         &lt;p&gt;&lt;/p&gt;       &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;This needs to be the first thing that runs in your interactive window.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;font face="Calibri"&gt;T&lt;span style="color: black; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ansi-language: en"&gt;&lt;span lang="EN"&gt;his posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923826" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/-NET+Futures/">.NET Futures</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>F# Performance Tweaking</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/09/16/f-performance-tweaking.aspx</link><pubDate>Tue, 16 Sep 2008 21:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8954209</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8954209</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/09/16/f-performance-tweaking.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Jomo Fisher—I’ve enjoyed reading the blog series on F# and game development &lt;/FONT&gt;&lt;A href="http://sharp-gamedev.blogspot.com/2008/09/tutorial-7-concurrency.html" mce_href="http://sharp-gamedev.blogspot.com/2008/09/tutorial-7-concurrency.html"&gt;&lt;FONT face=Calibri size=3&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Joh had posted an example of F# of using RK4 and showed some performance numbers comparing F# to C++ and OCaml. Don Syme had been reading too and asked if anyone on the F# team wanted to take a stab to see if they could optimize Joh’s code any further. I thought it would be fun. It turns out there were a few small changes that make a significant performance improvement without sacrificing immutability or other nice functionalness.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT face=Calibri size=3&gt;The example code in this article was compiled with the 1.9.6.2 version of the F# compiler.&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Joh probably already accounted for this, but it’s worth pointing out that there is a huge performance difference between Debug and Release builds for this example. On my machine I could measure a 3x performance difference between the two.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Considering just Release builds, I was able to get another 2-3x improvement by making several simple changes:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Change a few functions to return struct instead of tuple. For this, I created a ps (e.g. Position-Speed) struct and a sa (e.g. Speed-Acceleration) struct.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;I manually lifted a few computations out of the outer similar loop. I made &lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;(euler_implicit_opt accel_opt) &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;and &lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;(runge_kutta_4_opt (adapt_opt accel_opt))&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;into values.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;I changed the simulate function to use OptimizedClosures.FastFunc3.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;This last part especially needs some explaining. Closure optimization can be used when a function will be called many times. It allows F# to do a bit of expensive work up front that will later be amortized across the many calls to the function. Below is the simulate function using optimized closures. I’ve bolded the affected lines.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; simulate_opt intg_func t0 t_fin delta pos0 speed0 =&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; oc = OptimizedClosures.FastFunc3&amp;lt;_,_,_,_&amp;gt;.Adapt(intg_func)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; repeat t0 pos0 speed0 =&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;if&lt;/SPAN&gt; t0 &amp;gt; t_fin &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt; (pos0, speed0)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;else&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; t1 = t0 + delta&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; ps:ps&amp;lt;_&amp;gt; = oc.Invoke(pos0,speed0,delta)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;repeat t1 ps.pos ps.speed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;repeat t0 pos0 speed0&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Unfortunately, this is not something that you can stick everywhere and just get a benefit (otherwise, the compiler could just inject it for you).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You should definitely profile before and after. Here are my final performance numbers:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Optimized---&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Euler single: 2.529253&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Euler multi: 1.328133&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;RK4 single: 2.383238&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;RK4 multi: 1.241124&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Baseline---&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Euler single: 7.672767&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;Euler multi: 3.922392&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;RK4 single: 4.563456&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;RK4 multi: 2.450245&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Here’s the entire code. The optimized functions end in _opt. Thanks Joh for an awesome diversion!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#light&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; System&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; run_time_func (func: unit &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; 'a) =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; time0 = System.DateTime.Now&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; res = func ()&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; diff0 = System.DateTime.Now - time0&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(diff0, res)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; map_parallel func items =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; tasks =&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;seq {&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; i &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; items &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; async {&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;return&lt;/SPAN&gt; (func i)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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="mso-spacerun: yes"&gt;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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="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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Async.Run (Async.Parallel tasks)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; gravity =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;-9.81&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; spring pos =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; k = 100.0 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;-k * pos&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; drag k pos speed = -k * speed&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; ps&amp;lt;'num&amp;gt; = &lt;SPAN style="COLOR: blue"&gt;struct&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt; pos:'num&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt; speed:'num&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;(pos,speed) = {pos=pos;speed=speed}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;end&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; sa&amp;lt;'num&amp;gt; = &lt;SPAN style="COLOR: blue"&gt;struct&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt; speed:'num&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt; accel:'num&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;(speed,accel) = {speed=speed;accel=accel}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;end&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; euler_implicit accel_func pos speed delta =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; speed2 = speed + delta * accel_func pos speed &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;pos + delta * speed2, speed2&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; euler_implicit_opt accel_func pos speed delta =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; speed2 = speed + delta * accel_func pos speed &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;ps(pos + delta * speed2, speed2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; adapt (f: 'num &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; 'num &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; 'num) =&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; pos speed &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; accel = f pos speed &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;speed, accel&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; adapt_opt (f: 'num &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; 'num &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; 'num) =&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; pos speed &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; accel = f pos speed &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;sa(speed, accel)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; runge_kutta_4 deriv_func pos speed delta =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; half_delta = 0.5 * delta&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; s1, a1 = deriv_func pos speed&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; s2, a2 = deriv_func (pos + half_delta * s1) (speed + half_delta * a1)&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; s3, a3 = deriv_func (pos + half_delta * s2) (speed + half_delta * a2)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; s4, a4 = deriv_func (pos + delta * s3) (speed + delta * a3)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; pos1 = pos + delta/6.0*(s1 + 2.0*s2 + 2.0*s3 + s4)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; speed1 = speed + delta/6.0*(a1 + 2.0*a2 + 2.0*a3 + a4) &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;pos1, speed1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; runge_kutta_4_opt deriv_func pos speed delta =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; half_delta = 0.5 * delta&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; sa1:sa&amp;lt;_&amp;gt; = deriv_func pos speed&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; sa2 = deriv_func (pos + half_delta * sa1.speed) (speed + half_delta * sa1.accel)&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; sa3 = deriv_func (pos + half_delta * sa2.speed) (speed + half_delta * sa2.accel)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; sa4 = deriv_func (pos + delta * sa3.speed) (speed + delta * sa3.speed)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; pos1 = pos + delta/6.0*(sa1.speed + 2.0*sa2.speed + 2.0*sa3.speed + sa4.speed)&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; speed1 = speed + delta/6.0*(sa1.accel + 2.0*sa2.accel + 2.0*sa3.accel + sa4.accel) &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;ps(pos1, speed1)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; simulate intg_func t0 t_fin delta pos0 speed0 =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; repeat t0 pos0 speed0 =&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;if&lt;/SPAN&gt; t0 &amp;gt; t_fin &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt; (pos0, speed0)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;else&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; t1 = t0 + delta&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; pos1, speed1 = intg_func pos0 speed0 delta&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="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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;repeat t1 pos1 speed1&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;repeat t0 pos0 speed0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;inline&lt;/SPAN&gt; simulate_opt intg_func t0 t_fin delta pos0 speed0 =&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; oc = OptimizedClosures.FastFunc3&amp;lt;_,_,_,_&amp;gt;.Adapt(intg_func)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; repeat t0 pos0 speed0 =&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;if&lt;/SPAN&gt; t0 &amp;gt; t_fin &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt; (pos0, speed0)&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;else&lt;/SPAN&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; t1 = t0 + delta&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;let&lt;/SPAN&gt; ps:ps&amp;lt;_&amp;gt; = oc.Invoke(pos0,speed0,delta)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;repeat t1 ps.pos ps.speed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;repeat t0 pos0 speed0&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; initial_states = [ &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; s &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; 1..1000 &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; (float s * 1.0, 0.0) ]&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; t0 = 0.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; t_fin = 1000.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; delta = 0.025&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; accel pos speed = (drag 1.0) pos speed + spring pos + gravity &lt;SPAN style="COLOR: blue"&gt;in&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; accel_opt pos speed = (drag 1.0) pos speed + spring pos + gravity &lt;SPAN style="COLOR: blue"&gt;in&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; ef = (euler_implicit_opt accel_opt)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; rk4f = (runge_kutta_4_opt (adapt_opt accel_opt))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// Changes&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// - Change euler_implicit_opt and runge_kutta_4_opt to return a struct (ps)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// - Manually lift (euler_implicit_opt accel) and (runge_kutta_4_opt (adapt accel)) out of loop&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// - Change adapt_opt to return struct (sa)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// - Use optimized closure in simulate_opt&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Optimized---"&lt;/SPAN&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;for&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; i &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; 0..0 &lt;SPAN style="COLOR: blue"&gt;do&lt;/SPAN&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; List.map(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate_opt ef t0 t_fin (0.25*delta) x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Euler single: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; map_parallel(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate_opt ef t0 t_fin (0.25*delta) x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Euler multi: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; List.map(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate_opt rk4f t0 t_fin delta x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"RK4 single: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; map_parallel(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate_opt rk4f t0 t_fin delta x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"RK4 multi: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Baseline---"&lt;/SPAN&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;for&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; i &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; 0..0 &lt;SPAN style="COLOR: blue"&gt;do&lt;/SPAN&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; List.map(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate (euler_implicit accel) t0 t_fin (0.25*delta) x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Euler single: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; map_parallel(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate (euler_implicit accel) t0 t_fin (0.25*delta) x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"Euler multi: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; List.map(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate (runge_kutta_4 (adapt accel)) t0 t_fin delta x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"RK4 single: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; (run_time, res) = run_time_func (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; () &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; initial_states |&amp;gt; map_parallel(&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; (x,y) &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; simulate (runge_kutta_4 (adapt accel)) t0 t_fin delta x y))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"RK4 multi: %f"&lt;/SPAN&gt; run_time.TotalSeconds;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;done&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;T&lt;SPAN style="COLOR: black; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-ansi-language: EN"&gt; &lt;SPAN lang=EN&gt;his posting is provided "AS IS" with no warranties, and confers no rights.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8954209" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/-NET+Futures/">.NET Futures</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Performance/">Performance</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>F# Scripts—Reference Nirvana</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/09/01/f-scripts-reference-nirvana.aspx</link><pubDate>Tue, 02 Sep 2008 06:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8899045</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8899045</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/09/01/f-scripts-reference-nirvana.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;Jomo Fisher—&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jomo_fisher/archive/2008/08/25/f-scripts-zero-to-execute-in-ten-seconds.aspx" mce_href="http://blogs.msdn.com/jomo_fisher/archive/2008/08/25/f-scripts-zero-to-execute-in-ten-seconds.aspx"&gt;&lt;U&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Last time&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;FONT face=Calibri color=#000000 size=3&gt; I wrote about getting started with F# scripts. They’re the fastest way to just write and run some F#.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It’s reasonable to ask whether you can use them to do real work. After all, I just showed a toy example: reversing a linked list. In the real world you need use other people’s code. This is what the #r directive is for. You use it like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;#light &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;#r&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"c:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll" &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; System.Reflection &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; Microsoft.Office.Interop.Excel &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; app = ApplicationClass(Visible=&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;&lt;FONT color=#000000&gt;) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; sheet = app.Workbooks &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&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; &lt;/SPAN&gt;.Add() &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&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; &lt;/SPAN&gt;.Worksheets.[1] :?&amp;gt; Worksheet &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt; range = sheet.Range(&lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"A1"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&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; &lt;/SPAN&gt;.Value(Missing.Value) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&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; &lt;/SPAN&gt;&amp;lt;- &lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"Hello Excel" &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;Assuming you have all the stuff you need installed, when you run this script you’ll get an Excel spreadsheet:&lt;/FONT&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsReferenceNirvana_1428A/Excel_2.jpg"&gt;&lt;IMG title=Excel style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=431 alt=Excel src="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsReferenceNirvana_1428A/Excel_thumb.jpg" width=496 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;&lt;SHAPETYPE id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;&lt;STROKE joinstyle="miter"&gt;&lt;/STROKE&gt;&lt;FORMULAS&gt;&lt;F eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/F&gt;&lt;F eqn="sum @0 1 0"&gt;&lt;/F&gt;&lt;F eqn="sum 0 0 @1"&gt;&lt;/F&gt;&lt;F eqn="prod @2 1 2"&gt;&lt;/F&gt;&lt;F eqn="prod @3 21600 pixelWidth"&gt;&lt;/F&gt;&lt;F eqn="prod @3 21600 pixelHeight"&gt;&lt;/F&gt;&lt;F eqn="sum @0 0 1"&gt;&lt;/F&gt;&lt;F eqn="prod @6 1 2"&gt;&lt;/F&gt;&lt;F eqn="prod @7 21600 pixelWidth"&gt;&lt;/F&gt;&lt;F eqn="sum @8 21600 0"&gt;&lt;/F&gt;&lt;F eqn="prod @7 21600 pixelHeight"&gt;&lt;/F&gt;&lt;F eqn="sum @10 21600 0"&gt;&lt;/F&gt;&lt;/FORMULAS&gt;&lt;PATH o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/PATH&gt;&lt;LOCK v:ext="edit" aspectratio="t"&gt;&lt;/LOCK&gt;&lt;/SHAPETYPE&gt;&lt;SHAPE id=Picture_x0020_1 style="VISIBILITY: visible; WIDTH: 225.75pt; HEIGHT: 190.5pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1026"&gt;&lt;IMAGEDATA mce_src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="o:title"&gt;&lt;/IMAGEDATA&gt;&lt;/SHAPE&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;One thing that is fragile about the script is that different people may have installed the needed assembly in different spots. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;To help with this situation, we’ve done something that I think is pretty magical. F# will resolve the assemblies using the same industrial strength reference resolution engine that MSBuild uses. (I tipped our hand a bit on this &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jomo_fisher/archive/2008/05/22/programmatically-resolve-assembly-name-to-full-path-the-same-way-msbuild-does.aspx" mce_href="http://blogs.msdn.com/jomo_fisher/archive/2008/05/22/programmatically-resolve-assembly-name-to-full-path-the-same-way-msbuild-does.aspx"&gt;&lt;U&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;here&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;). So now, you can just reference the assembly like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"Microsoft.Office.Interop.Excel"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;And F# will just find it. Now the script works in a lot more places.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;You can even use it to reference a specific version of an assembly. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;You would do this, for example, if your script only works with a particular version of an assembly or if you want to reference and older version.&lt;/FONT&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;The MSBuild algorithm is open to anyone who wants to publish their assembly (search for AssemblyFoldersEx). For example, here’s a screenshot of me referencing the XCeed chart library:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsReferenceNirvana_1428A/XCeed_2.jpg"&gt;&lt;IMG title=XCeed style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=271 alt=XCeed src="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsReferenceNirvana_1428A/XCeed_thumb.jpg" width=564 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;SHAPE id=Picture_x0020_8 style="VISIBILITY: visible; WIDTH: 6in; HEIGHT: 182.25pt; mso-wrap-style: square" type="#_x0000_t75" o:spid="_x0000_i1025"&gt;&lt;IMAGEDATA mce_src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title="o:title"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;&lt;/FONT&gt;&lt;/IMAGEDATA&gt;&lt;/SHAPE&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;You can pick up the latest CTP of F# here: &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://msdn.com/fsharp" mce_href="http://msdn.com/fsharp"&gt;&lt;U&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;http://msdn.com/fsharp&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8899045" width="1" height="1"&gt;</description></item><item><title>F# Scripts--Zero to Execute in Ten Seconds</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/30/f-scripts-zero-to-execute-in-ten-seconds.aspx</link><pubDate>Sat, 30 Aug 2008 17:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8895247</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8895247</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/30/f-scripts-zero-to-execute-in-ten-seconds.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;Jomo Fisher--F# is about conciseness. Consider the interview question that asks you to reverse a singly-linked-list. I’ve been asked this question &lt;I style="mso-bidi-font-style: normal"&gt;twice&lt;/I&gt; in interviews and even the cleanest implementation in the interviewer’s chosen language was long and it was hard to show that I’d covered the corner cases. The F# answer is concise and self-evidently correct now that I’ve learned F# well enough:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// Take two lists, source and target, and append all the items from source &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// to target in reverse order. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt;&lt;FONT color=#000000&gt; AppendReverse source target = &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt;&lt;FONT color=#000000&gt; source &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;with &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| [] &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt; target &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| (head::tail) &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt; AppendReverse tail (head::target)&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// Call AppendReverse with the empty list for target.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; Reverse list = &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;AppendReverse list [] &lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;We’ve tried to bring this same philosophy of power and economy when integrating F# into Visual Studio. While F# does offer traditional MSBuild-based project support, sometimes you just want to write some code and not worry about projects and solutions. This is what F# scripts are for.&lt;/FONT&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;Once you have F# installed, you’re free to just start coding. These steps take about ten seconds:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-fareast-font-family: calibri; mso-bidi-font-family: calibri; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;SPAN style="mso-list: ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Press Ctrl+N (new file) and select Script\F# Script File&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-fareast-font-family: calibri; mso-bidi-font-family: calibri; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;SPAN style="mso-list: ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;In the opened .fsx file add:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;System.Windows.Forms.MessageBox.Show(&lt;/FONT&gt;&lt;SPAN style="COLOR: maroon"&gt;"Hello"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-fareast-font-family: calibri; mso-bidi-font-family: calibri; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;SPAN style="mso-list: ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;One time only, press Ctrl+Alt+F to bring up the F# interactive window.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-fareast-font-family: calibri; mso-bidi-font-family: calibri; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;SPAN style="mso-list: ignore"&gt;&lt;FONT face=Calibri size=3&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Press Ctrl+A (select everything) and then Alt+Enter (execute)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsZerotoExecuteinTenSeconds_D5D0/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=379 alt=image src="http://blogs.msdn.com/blogfiles/jomo_fisher/WindowsLiveWriter/FScriptsZerotoExecuteinTenSeconds_D5D0/image_thumb.png" width=436 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;That’s it. We’ve tried to eliminate every piece of friction between you and the code you want to write.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;We call these files scripts, but they’re not watered down in any way. They are actual F# which means they are compiled, statically typed and have access to .NET. There’s just not a project or even an explicit build step. In fact, this is one of the reasons F# needed a Visual Studio language service that can actively display errors and warnings as you type.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;You can pick up the CTP of F# 1.9.6.0 here: &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://msdn.com/fsharp" mce_href="http://msdn.com/fsharp"&gt;&lt;U&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;http://msdn.com/fsharp&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;FONT face=Calibri color=#000000 size=3&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8895247" width="1" height="1"&gt;</description></item><item><title>Update on Fast Switching with LINQ</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/29/update-on-fast-switching-with-linq.aspx</link><pubDate>Fri, 29 Aug 2008 18:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8905469</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8905469</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/29/update-on-fast-switching-with-linq.aspx#comments</comments><description>&lt;P&gt;Jomo Fisher—A while back I &lt;A href="http://blogs.msdn.com/jomo_fisher/archive/2007/03/28/fast-switching-with-linq.aspx" mce_href="http://blogs.msdn.com/jomo_fisher/archive/2007/03/28/fast-switching-with-linq.aspx"&gt;wrote&lt;/A&gt; about using LINQ to get close-to-the-metal performance in a particular string lookup case in C#. Here, Gustavo Guerra has expanded on the idea significantly with a class he calls &lt;A href="http://blog.codebeside.org/archive/2008/08/28/staticstringdictionary-fast-switching-with-linq-revisited.aspx" mce_href="http://blog.codebeside.org/archive/2008/08/28/staticstringdictionary-fast-switching-with-linq-revisited.aspx"&gt;StaticStringDicitionary&lt;/A&gt;. I haven’t tried it, but it looks like it should be nearly as fast as the original (and better tested :).&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN style="mso-ansi-language: en"&gt;&lt;FONT face=Calibri size=3&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8905469" width="1" height="1"&gt;</description></item><item><title>F# Community Technology Preview</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/24/f-community-technology-preview.aspx</link><pubDate>Mon, 25 Aug 2008 05:12:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8893080</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8893080</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/08/24/f-community-technology-preview.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher—The F# team has been working furiously on the upcoming release of F# these last weeks. We’ll have some cool stuff to show you soon. Stay tuned.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN" style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;font face="Calibri"&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; line-height: 115%; font-family: consolas; mso-bidi-font-family: &amp;#39;Courier New&amp;#39;"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8893080" width="1" height="1"&gt;</description></item><item><title>Programmatically Resolve Assembly Name to Full Path the Same Way MSBuild Does</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/05/22/programmatically-resolve-assembly-name-to-full-path-the-same-way-msbuild-does.aspx</link><pubDate>Fri, 23 May 2008 00:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8534563</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8534563</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/05/22/programmatically-resolve-assembly-name-to-full-path-the-same-way-msbuild-does.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Jomo Fisher—Every once in a while I find I need to turn and assembly name like “System” or “System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL” into a path to the actual file for that assembly. This is a tricky problem considering the assembly name might be for a product install in Program Files or elsewhere. MSBuild already has rules for doing this resolution. Here’s how to call that code directly (written in F#):&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#light&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r &lt;SPAN style="COLOR: maroon"&gt;"c:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Build.Tasks.dll"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r &lt;SPAN style="COLOR: maroon"&gt;"c:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Build.Utilities.dll"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r &lt;SPAN style="COLOR: maroon"&gt;"c:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Build.Framework.dll"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#r &lt;SPAN style="COLOR: maroon"&gt;"c:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Build.Engine.dll"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Microsoft.Build.Tasks&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Microsoft.Build.Utilities&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Microsoft.Build.Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Microsoft.Build.BuildEngine&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;/// Reference resolution results. All paths are fully qualified.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; ResolutionResults = {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Paths to primary references&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;referencePaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Paths to dependencies&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;referenceDependencyPaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Paths to related files (like .xml and .pdb)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;relatedPaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Paths to satellite assemblies used for localization.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;referenceSatellitePaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Additional files required to support multi-file assemblies.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;referenceScatterPaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Paths to files that reference resolution recommend be copied to the local directory&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;referenceCopyLocalPaths:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;/// Binding redirects that reference resolution recommends for the app.config file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;suggestedBindingRedirects:string array&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Resolve(references:string array, outputDirectory:string) =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; x = { &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; IBuildEngine &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.BuildProjectFile(projectFileName, targetNames, globalProperties, argetOutputs) = &lt;SPAN style="COLOR: blue"&gt;true&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.LogCustomEvent(e) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.LogErrorEvent(e) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.LogMessageEvent(e) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.LogWarningEvent(e) = ()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.ColumnNumberOfTaskNode &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt; get() = 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.ContinueOnError &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt; get() = &lt;SPAN style="COLOR: blue"&gt;true&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.LineNumberOfTaskNode &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt; get() = 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;member&lt;/SPAN&gt; be.ProjectFileOfTaskNode &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt; get() = &lt;SPAN style="COLOR: maroon"&gt;""&lt;/SPAN&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; rar = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ResolveAssemblyReference()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.BuildEngine &amp;lt;- x&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.TargetFrameworkDirectories &amp;lt;- [|&lt;SPAN style="COLOR: maroon"&gt;@"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\"&lt;/SPAN&gt;|]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.AllowedRelatedFileExtensions &amp;lt;- [| &lt;SPAN style="COLOR: maroon"&gt;".pdb"&lt;/SPAN&gt;; &lt;SPAN style="COLOR: maroon"&gt;".xml"&lt;/SPAN&gt;; &lt;SPAN style="COLOR: maroon"&gt;".optdata"&lt;/SPAN&gt; |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.FindRelatedFiles &amp;lt;- &lt;SPAN style="COLOR: blue"&gt;true&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.Assemblies &amp;lt;- [|&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; r &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; references &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Microsoft.Build.Utilities.TaskItem(r):&amp;gt;ITaskItem|]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.SearchPaths &amp;lt;- [| &lt;SPAN style="COLOR: maroon"&gt;"{CandidateAssemblyFiles}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"{HintPathFromItem}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"{TargetFrameworkDirectory}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"{Registry:Software\Microsoft\.NetFramework,v3.5,AssemblyFoldersEx}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"{AssemblyFolders}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&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;&lt;SPAN style="COLOR: maroon"&gt;"{GAC}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"{RawFileName}"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;outputDirectory |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.AllowedAssemblyExtensions &amp;lt;- [| &lt;SPAN style="COLOR: maroon"&gt;".exe"&lt;/SPAN&gt;; &lt;SPAN style="COLOR: maroon"&gt;".dll"&lt;/SPAN&gt; |]&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rar.TargetProcessorArchitecture &amp;lt;- &lt;SPAN style="COLOR: maroon"&gt;"x86"&lt;/SPAN&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; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; not (rar.Execute()) &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;failwith &lt;SPAN style="COLOR: maroon"&gt;"Could not resolve"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;referencePaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.ResolvedFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;referenceDependencyPaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.ResolvedDependencyFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;relatedPaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.RelatedFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;referenceSatellitePaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.SatelliteFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;referenceScatterPaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.ScatterFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;referenceCopyLocalPaths = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.CopyLocalFiles &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;suggestedBindingRedirects = [| &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; rar.SuggestedRedirects &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; p.ItemSpec |]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;try&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; s = Resolve([| &lt;SPAN style="COLOR: maroon"&gt;"System"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"Microsoft.SqlServer.Replication"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: maroon"&gt;""&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;printfn &lt;SPAN style="COLOR: maroon"&gt;"%A"&lt;/SPAN&gt; s&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;finally&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ignore (System.Console.ReadKey())&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The result of running the code looks like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;{referencePaths =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;[|"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.Replication.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.5\\System.Core.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System\\2.0.0.0__b77a5c561934e089\\System.dll"|];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;referenceDependencyPaths =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;[|"C:\\Windows\\assembly\\GAC_MSIL\\System.DirectoryServices\\2.0.0.0__b03f5f7f11d50a3a\\System.DirectoryServices.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Xml\\2.0.0.0__b77a5c561934e089\\System.Xml.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\Microsoft.SqlServer.BatchParser\\9.0.242.0__89845dcd8080cc91\\Microsoft.SqlServer.BatchParser.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Runtime.Remoting\\2.0.0.0__b77a5c561934e089\\System.Runtime.Remoting.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\Microsoft.Vsa\\8.0.0.0__b03f5f7f11d50a3a\\Microsoft.Vsa.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\System.Data.OracleClient\\2.0.0.0__b77a5c561934e089\\System.Data.OracleClient.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.ConnectionInfo.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\Accessibility\\2.0.0.0__b03f5f7f11d50a3a\\Accessibility.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\System.Transactions\\2.0.0.0__b77a5c561934e089\\System.Transactions.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.DirectoryServices.Protocols\\2.0.0.0__b03f5f7f11d50a3a\\System.DirectoryServices.Protocols.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Drawing\\2.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Deployment\\2.0.0.0__b03f5f7f11d50a3a\\System.Deployment.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.Smo.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\System.EnterpriseServices\\2.0.0.0__b03f5f7f11d50a3a\\System.EnterpriseServices.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Web.RegularExpressions\\2.0.0.0__b03f5f7f11d50a3a\\System.Web.RegularExpressions.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.WmiEnum.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.ServiceBrokerEnum.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Configuration\\2.0.0.0__b03f5f7f11d50a3a\\System.Configuration.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Web.Services\\2.0.0.0__b03f5f7f11d50a3a\\System.Web.Services.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Management\\2.0.0.0__b03f5f7f11d50a3a\\System.Management.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Design\\2.0.0.0__b03f5f7f11d50a3a\\System.Design.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\System.Web\\2.0.0.0__b03f5f7f11d50a3a\\System.Web.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Windows.Forms\\2.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Security\\2.0.0.0__b03f5f7f11d50a3a\\System.Security.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.SmoEnum.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Runtime.Serialization.Formatters.Soap\\2.0.0.0__b03f5f7f11d50a3a\\System.Runtime.Serialization.Formatters.Soap.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\Microsoft.JScript\\8.0.0.0__b03f5f7f11d50a3a\\Microsoft.JScript.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Configuration.Install\\2.0.0.0__b03f5f7f11d50a3a\\System.Configuration.Install.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\Microsoft.VisualC\\8.0.0.0__b03f5f7f11d50a3a\\Microsoft.VisualC.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.SqlEnum.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_32\\System.Data\\2.0.0.0__b77a5c561934e089\\System.Data.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Drawing.Design\\2.0.0.0__b03f5f7f11d50a3a\\System.Drawing.Design.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.Rmo.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.Data.SqlXml\\2.0.0.0__b77a5c561934e089\\System.Data.SqlXml.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Windows\\assembly\\GAC_MSIL\\System.ServiceProcess\\2.0.0.0__b03f5f7f11d50a3a\\System.ServiceProcess.dll";&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"C:\\Program Files\\Microsoft SQL Server\\90\\SDK\\Assemblies\\Microsoft.SqlServer.RegSvrEnum.dll"|];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;relatedPaths = [||];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;referenceSatellitePaths = [||];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;referenceScatterPaths =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;[|"C:\\Windows\\assembly\\GAC_32\\System.EnterpriseServices\\2.0.0.0__b03f5f7f11d50a3a\\System.EnterpriseServices.Wrapper.dll"|];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;referenceCopyLocalPaths = [||];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;suggestedBindingRedirects = [||];}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=EN style="mso-ansi-language: EN; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8534563" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/MSBuild/">MSBuild</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>Correct by Construction in F#</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2008/04/22/correct-by-construction-in-f.aspx</link><pubDate>Tue, 22 Apr 2008 22:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8417152</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=8417152</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2008/04/22/correct-by-construction-in-f.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Correct by Construction in F#&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Jomo Fisher—a theme in the design of the F# language is that problems in the code are revealed as compilation errors. Consider this C# code which is used to compose a courteous letter to a customer:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;enum&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Courtesy&lt;/SPAN&gt; { Mr, Ms, Dr }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;class&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Customer&lt;/SPAN&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Courtesy&lt;/SPAN&gt; Courtesy { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Name { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;class&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Letter&lt;/SPAN&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Introduction { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Body { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;static&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Letter&lt;/SPAN&gt; Correspond(&lt;SPAN style="COLOR: #2b91af"&gt;Customer&lt;/SPAN&gt; customer, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; message) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;switch&lt;/SPAN&gt; (customer.Courtesy)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Courtesy&lt;/SPAN&gt;.Mr: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Letter&lt;/SPAN&gt; { Introduction = &lt;SPAN style="COLOR: #a31515"&gt;"Mr. "&lt;/SPAN&gt; + customer.Name, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;Body = message };&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Courtesy&lt;/SPAN&gt;.Ms: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Letter&lt;/SPAN&gt; { Introduction = &lt;SPAN style="COLOR: #a31515"&gt;"Ms. "&lt;/SPAN&gt; + customer.Name, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;Body = message };&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;This compiles without errors despite having some problems (can you spot them?)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;I want to stop now and claim that I’m not picking on C# which is a wonderful language. It’s just that I need to compare F# to something in order to illuminate my point and I happen to know C# pretty well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Now, transliterate the code above into F#:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#light&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Courtesy = Mr | Ms | Dr &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Customer = {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Courtesy:Courtesy&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Name:string&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Letter = {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Introduction:string&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Body:string&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Correspond(customer,message) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; customer.Courtesy &lt;SPAN style="COLOR: blue"&gt;with&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Mr &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Mr. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Ms &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Ms. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| _ &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Compiling this gives a warning on the last line:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;error FS0043: The type 'Letter' does not have 'null' as a proper value.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;In C#, objects are allowed to be null by default and your code is responsible for handling the possibility of nullity everywhere. F# objects are not allowed to be null and, except in a few special cases such as interoperating with non-F# code, you can assume that object instances aren’t null.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;So the caller of the Correspond function need not worry about receiving a null Letter instance and I can just delete the last line:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Correspond(customer,message) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; customer.Courtesy &lt;SPAN style="COLOR: blue"&gt;with&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Mr &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Mr. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Ms &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Ms. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Now I get a warning:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;warning FS0025: Incomplete pattern match on expression. The value ‘Dr’ will not be matched&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;This is an easy mistake to make: I forgot one of the cases in the Courtesy enumeration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;An aside on pattern matching: If you code in F# you’ll find yourself using pattern matching for a significant amount of the logic in your program. It’s far more than just a synonym for switch. It can do complex matching against just about any type of object. This, combined with completeness checking, helps eliminate a large class of bug.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Here’s my final corrected code:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; Correspond(customer,message) = &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; customer.Courtesy &lt;SPAN style="COLOR: blue"&gt;with&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Mr &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Mr. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Ms &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Ms. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;| Dr &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; {Introduction = &lt;SPAN style="COLOR: maroon"&gt;"Dr. "&lt;/SPAN&gt; + customer.Name; Body=message}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;This idea that F# should lead you to write code that is correct by construction is not just about the features I mentioned above. Its fundamentally weaved through the language. Take a look at how casting works for another example. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;FONT face=Calibri&gt;Honestly, it took me some time to get used to. I particularly struggled with the non-nullity of object instances. I was used to being able to smuggle the special “null” value around without changing my code to accommodate it. I realize now I was just sweeping a potential problem under the rug.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8417152" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Code+Quality/">Code Quality</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>Strange Confluence: An Immutable Queue in F#</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2007/12/12/strange-confluence-an-immutable-queue-in-f.aspx</link><pubDate>Wed, 12 Dec 2007 19:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6750019</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=6750019</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2007/12/12/strange-confluence-an-immutable-queue-in-f.aspx#comments</comments><description>&lt;P&gt;Jomo Fisher--Reading one of my favorite blogs this morning--Eric Lippert's Fabulous Adventures in Coding--I came across his article on implementing an &lt;A href="http://blogs.msdn.com/ericlippert/archive/2007/12/10/immutability-in-c-part-four-an-immutable-queue.aspx" mce_href="http://blogs.msdn.com/ericlippert/archive/2007/12/10/immutability-in-c-part-four-an-immutable-queue.aspx"&gt;immutable queue in C#.&lt;/A&gt; The funny thing is that just yesterday I wrote exactly the same structure in F#. Here it is for your reading pleasure:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;type&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Fifo&amp;lt;'a&amp;gt; = &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt;()={xs=[];rxs=[]}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(xs,rxs)={xs=xs;rxs=rxs}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&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;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt;&lt;FONT color=#000000&gt; xs: 'a list;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;val&lt;/SPAN&gt;&lt;FONT color=#000000&gt; rxs: 'a list;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&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;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;member&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Empty() = &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Fifo&amp;lt;'a&amp;gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;member&lt;/SPAN&gt;&lt;FONT color=#000000&gt; q.IsEmpty = (q.xs = []) &amp;amp;&amp;amp; (q.rxs = [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;member&lt;/SPAN&gt;&lt;FONT color=#000000&gt; q.Enqueue(x) = Fifo(q.xs,x::q.rxs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;member&lt;/SPAN&gt;&lt;FONT color=#000000&gt; q.Take() = &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; q.IsEmpty &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt;&lt;FONT color=#000000&gt; failwith &lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"fifo.Take: empty queue"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt;&lt;FONT color=#000000&gt; q.xs &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;with&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&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;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (Fifo(List.rev q.rxs,[])).Take()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&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;| y::ys &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (Fifo(ys, q.rxs)),y&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This is code modified from a mutable structure that I found in the F# distribution. The queues are pretty similar except for a few minor details:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;F# version doesn't implement IEnumerable&amp;lt;T&amp;gt;.&lt;/LI&gt;
&lt;LI&gt;F# version relies on the built-in list class which is semantically identical to an immutable stack.&lt;/LI&gt;
&lt;LI&gt;C# version carries the "popped" instance of T along with the queue itself whereas the F# version returns this as part of a tuple from Take(). I think I prefer my way on this point--it seems like information leakage for the queue have a memory of the last thing popped.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;That's all for now, and as always...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ansi-language: en"&gt;&lt;FONT face=Calibri size=3&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6750019" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/C_2300_/">C#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Immutable/">Immutable</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Data+Structures/">Data Structures</category></item><item><title>Tight Code--A Puzzle in F#</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2007/11/17/tight-code-a-puzzle-in-f.aspx</link><pubDate>Sat, 17 Nov 2007 22:37:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6342674</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>39</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=6342674</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2007/11/17/tight-code-a-puzzle-in-f.aspx#comments</comments><description>&lt;p&gt;Jomo Fisher--Luke Hoban wrote something in a &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/11/14/f.aspx"&gt;blog entry&lt;/a&gt; that resonated with me:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;One of the most striking features of F# code is that it is very terse - ideas can typically be expressed with a small amount of code.&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Don Syme once mentioned (I'm paraphrasing) that an aspirational goal for F# in the beginning was to make a compiler that could compile itself in less than 10,000 lines of code. Though that line count has since been passed I often get the sense that, with enough thought, I could boil whatever code I'm working on down to almost nothing.&lt;/p&gt; &lt;p&gt;Consider this coding problem (which I have since used as an interview question). Take a singly-linked-list of singly-linked-lists and pivot the inner values. For example say I have this list:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'"&gt;let&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt; have = [['a';'b';'1'];['c';'d';'2'];['e';'f';'3']]&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Then the list I want is this:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'"&gt;let&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt; want = [['a';'c';'e'];['b';'d';'f'];['1';'2';'3']]&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So the new list's first list has the first item from each of the original inner lists and so on. This problem actually came up in real-world piece of code I was working on. My first cut was procedural and about twenty lines of code. I don't have it here to show you, but after a few iterations and refactorings I got it down to a respectable nine lines:&lt;/p&gt; &lt;blockquote&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'"&gt;let&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt; flatteninto source target = &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List.zip target source |&amp;gt; List.map(&lt;span style="color: blue"&gt;fun&lt;/span&gt; (head, tail)&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;head@[tail])&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'"&gt;let&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt; pivot list = &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;let&lt;/span&gt; &lt;span style="color: blue"&gt;rec&lt;/span&gt; work target = &lt;span style="color: blue"&gt;function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; head::tail&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt; work (flatteninto head target) tail&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt; target&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;let&lt;/span&gt; empties = list|&amp;gt;List.map(&lt;span style="color: blue"&gt;fun&lt;/span&gt; l&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;[])&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; work empties list&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;At this point, I was stuck. It worked, but it seemed like there should be a better solution. In particular, the second to last line where I build up a list of empty lists didn't seem quite right. Being stuck, I asked my teammates whether there was a better solution out there. As it turns out, James Margetson had seen a beautiful four line solution to the problem.&lt;/p&gt; &lt;p&gt;I'll post the solution James showed me in a few days. In the meantime, I'd like to invite you to give the problem a try in the programming language of your choice. Can you cleanly beat my nine-line solution above? Can you get it down to four lines? I only ask that you don't change the input structure--singly-linked-list of singly-linked-list. Also, in my problem, the input was guaranteed to be well formed so I didn't need to check for jagged inner lists or other malformed inputs. Finally, notice that while I showed a 3x3 input in the example the dimensions don't have to be the same.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update 11/20/2007 - Spoiler Alert!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As promised, here's the F# that James showed me&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'"&gt;let&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: blue"&gt;rec&lt;/span&gt;&lt;font color="#000000"&gt; transpose haves =&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: blue"&gt;match&lt;/span&gt;&lt;font color="#000000"&gt; haves &lt;/font&gt;&lt;span style="color: blue"&gt;with&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (_::_)::_ &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; map hd haves :: transpose (map tl haves)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: blue"&gt;-&amp;gt;&lt;/span&gt;&lt;font color="#000000"&gt; []&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;p&gt;This is essentially the same as the Haskell algorithm that has been posted in the comments. &lt;/p&gt; &lt;p&gt;I want to thank the folks who posted solutions in various different languages--Scheme, Haskell, Ruby, C#, Python. Also, there was an OCaml solution which is indeed compatible with F#.&lt;/p&gt; &lt;p&gt;Several folks pointed out the analogy with matrix transpose. The code does get a lot easier when your input is an array of arrays, but you don't always get to pick your input representation.&lt;/p&gt; &lt;p&gt;One commenter opined that functional code may be easier to read than it is to write. This is true for me in one sense: there seems to always be a way to write the code a little better. Figuring out when I'm done is a challenge.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span lang="EN" style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;font face="Calibri" size="3"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6342674" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/Puzzle/">Puzzle</category></item><item><title>F# Team is Hiring</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/30/f-team-is-hiring.aspx</link><pubDate>Tue, 30 Oct 2007 23:33:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5785809</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=5785809</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/30/f-team-is-hiring.aspx#comments</comments><description>&lt;p&gt;Do you want to help us ship F#? Check out these job postings:&lt;/p&gt; &lt;p&gt;Developer: &lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=5DF7A6AB-80C5-41CB-9A8D-5B344C33AE1D&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;http://members.microsoft.com/careers/search/details.aspx?JobID=5DF7A6AB-80C5-41CB-9A8D-5B344C33AE1D&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Tester: &lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=B36FFEB2-4C11-4B9C-9B3F-5B23CC604A7B&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;http://members.microsoft.com/careers/search/details.aspx?JobID=B36FFEB2-4C11-4B9C-9B3F-5B23CC604A7B&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5785809" width="1" height="1"&gt;</description></item><item><title>The Least a C# Programmer Needs to Know about F# Part II--Modules</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/23/the-least-a-c-programmer-needs-to-know-about-f-part-ii-modules.aspx</link><pubDate>Tue, 23 Oct 2007 20:31:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5628446</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=5628446</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/23/the-least-a-c-programmer-needs-to-know-about-f-part-ii-modules.aspx#comments</comments><description>&lt;p&gt; &lt;/p&gt; &lt;p&gt;Jomo Fisher--Many languages, especially those in the OO vein, require an outermost class to put code in. Usually, good practice requires an enclosing namespace as well.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;F# allows functions and even function calls in the outermost scope. Here is the minimal F# program:&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;printf "Hello!"&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;Really, that's the whole thing. My first concern upon seeing this was that the all these functions in the global namespace would eventually collide in larger projects making things unmanageable. It seemed a lot like returning to the nasty global state that you sometimes see in older C codebases. It turns out, however, that F# puts each file's functions, function calls and types inside its own construct called a "Module". Consider this slightly modified version:&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;// File Hello.fs&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;#light&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;let Say s = printf s&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;Say "Hello!"&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;Which is saved in file called Hello.fs. This defines a function called 'Say' and then calls it. Using Reflector, I can see the Say method decompiled into C#:&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;[CompilationMapping(SourceLevelConstruct.Module)]&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;public class Hello&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;{&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public static T Say&amp;lt;T&amp;gt;(Format&amp;lt;T, TextWriter, Unit, Unit&amp;gt; s)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&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;return Pervasives.printf&amp;lt;T&amp;gt;(s);&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;} &lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;The F# compiler has put the method into a public class called Hello . This is F#'s representation of the Module. The class name Hello is derived from the file name Hello.fs.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;You can change the Module name if you like:&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;module MyModule = &lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;let Say s = printf s&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in 0in 0in 0.375in; font-family: calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Say "Hello!"&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;For larger projects, I think its best to explicitly name modules. For smaller, one-off projects its convenient not to have to think about it.&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;In most .NET projects I've worked on, there usually ends up being a few utility classes that just have a bunch of related static methods in them. These are functions that just didn't cleanly fit the OO paradigm. Its tempting to think of these classes as code smells. After all, surely there's a clean OO representation for them that I haven't thought of yet, right?&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;I think the answer to this is: no, not everything fits well into object-orientation. &lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;My proof by existence is to consider .NET's Stream classes that were released in .NET 1.0. These classes were extremely well factored. They beautifully hid the underlying media or communication protocol behind an abstract stream of information.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;They were also damn hard to use for simple cases. In a later .NET release the File, Path and Directory classes were introduced. These were just classes with nice, simple static methods for doing the common things you want to do with files, paths and directories.&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;F#&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;makes this style of API a first-class citizen: the Module.&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;So am I saying good-bye to OO? No way. But I consider it a hammer and not every problem is a nail.&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 11pt; margin: 0in; font-family: calibri"&gt;&lt;span lang="EN" style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;font face="Calibri" size="3"&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5628446" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item><item><title>WideFinder--Naive F# Implementation</title><link>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/22/widefinder-naive-f-implementation.aspx</link><pubDate>Mon, 22 Oct 2007 07:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5591004</guid><dc:creator>Jomo Fisher</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jomo_fisher/rsscomments.aspx?WeblogPostID=5591004</wfw:commentRss><comments>http://blogs.msdn.com/b/jomo_fisher/archive/2007/10/22/widefinder-naive-f-implementation.aspx#comments</comments><description>&lt;P&gt;Jomo Fisher--Here's an &lt;A href="http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder" mce_href="http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder"&gt;interesting problem&lt;/A&gt; that some people are having fun with. Don Box posted a &lt;A href="http://www.pluralsight.com/blogs/dbox/archive/2007/10/09/48719.aspx" mce_href="http://www.pluralsight.com/blogs/dbox/archive/2007/10/09/48719.aspx"&gt;naive implementation in C#&lt;/A&gt; so I thought I'd post the equivalent in F#:&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#light&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; System.Text.RegularExpressions&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; System.IO&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;open&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; System.Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; regex = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Regex(&lt;SPAN style="COLOR: #a31515"&gt;@"GET /ongoing/When/\d\d\dx/(\d\d\d\d/\d\d/\d\d/[^ .]+)"&lt;/SPAN&gt;, RegexOptions.Compiled)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; seqRead fileName =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;seq { &lt;SPAN style="COLOR: blue"&gt;use&lt;/SPAN&gt; reader = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; StreamReader(File.OpenRead(fileName))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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: blue"&gt;while&lt;/SPAN&gt; not reader.EndOfStream &lt;SPAN style="COLOR: blue"&gt;do&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;yield&lt;/SPAN&gt; reader.ReadLine() }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;let&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; query fileName = &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;seqRead fileName&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;|&amp;gt; Seq.map (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; line &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; regex.Match(line)) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;|&amp;gt; Seq.filter (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; regMatch &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; regMatch.Success)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;|&amp;gt; Seq.map (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; regMatch &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; regMatch.Value)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;|&amp;gt; Seq.countBy (&lt;SPAN style="COLOR: blue"&gt;fun&lt;/SPAN&gt; url &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; url)&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And here's the code to call it:&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;for&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; result &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;FONT color=#000000&gt; query &lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;@"file.txt"&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;do&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt;&lt;FONT color=#000000&gt; url, count = result&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/SPAN&gt;One nice thing is that F#'s interactive window has a #time;; option which shows you wall-clock time and CPU time. Here is the result from running the code above on a 256meg file I concatenated together (I couldn't find the one Don was using):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2&gt;Real: 00:00:06.899, CPU: 00:00:04.165, GC gen0: 416, gen1: 1, gen2: 0&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2&gt;It looks like the majority of the time is in CPU so there should be ample opportunity to parallelize. One thing to note: I think the interactive window is unoptimized--when I just compile and run the code, I get times in the sub 5-seconds range. My machine is a 4-way 2.4 GHz Core Duo.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN style="mso-ansi-language: en; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri"&gt;&lt;FONT face=Calibri size=3&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code&gt;&lt;/PRE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5591004" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jomo_fisher/archive/tags/F_2300_/">F#</category></item></channel></rss>
