<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>F# on Brian Braatz Blog</title><link>https://brianbraatz.github.io/tags/f%23/</link><description>Recent content in F# on Brian Braatz Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 14 Mar 2025 16:40:18 +0000</lastBuildDate><atom:link href="https://brianbraatz.github.io/tags/f%23/index.xml" rel="self" type="application/rss+xml"/><item><title>F# in a Nutshell</title><link>https://brianbraatz.github.io/p/fsharp-in-a-nutshell/</link><pubDate>Wed, 14 Sep 2016 00:00:00 +0000</pubDate><guid>https://brianbraatz.github.io/p/fsharp-in-a-nutshell/</guid><description>&lt;img src="https://brianbraatz.github.io/post/Articles/IMAGES/fsharp.png" alt="Featured image of post F# in a Nutshell" />&lt;!-- # F# in a Nutshell: The Functional Side of .NET
Ah, F#. The quirky, functional cousin in the .NET family. If C# is the popular kid that everyone wants to be, and VB.NET is the old grandpa that refuses to retire, then F# is the eccentric genius who codes in a dark corner, sipping on some obscure artisan coffee. -->
&lt;h2 id="what-is-f">What is F#?
&lt;/h2>&lt;p>F# is a functional-first programming language that runs on .NET.&lt;/p>
&lt;p>It’s like that one friend who insists on doing everything in a more &amp;ldquo;mathematically pure&amp;rdquo; way while the rest of your group happily hacks away in imperative C#.&lt;/p>
&lt;!--
But don’t be fooled—F# isn’t just for academia. It’s fast, powerful, and great for things like data science, financial modeling, and domain-driven design. Basically, if you like clean, concise code and hate unnecessary boilerplate, F# might be your new best friend. -->
&lt;h2 id="why-should-you-care-about-f">Why Should You Care About F#?
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Concise and Expressive&lt;/strong> – F# lets you do more with less code. No more endless curly braces and semicolons. Just pure, readable beauty.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Immutability by Default&lt;/strong> – In F#, variables are immutable unless you explicitly make them mutable. This means fewer bugs due to unintended side effects.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Pattern Matching&lt;/strong> – This is where F# really shines. Instead of writing a dozen &lt;code>if-else&lt;/code> statements, you can elegantly destructure data with pattern matching.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Interoperability&lt;/strong> – It runs on .NET, so you can use all your favorite C# libraries if you must.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>It Makes You Look Smart&lt;/strong> – Let’s be honest, telling people you code in a functional language makes you sound 10x more intelligent.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="a-taste-of-f">A Taste of F#
&lt;/h2>&lt;p>Let’s take a look at some basic F# code and how it compares to C#.&lt;/p>
&lt;h3 id="hello-functional-world">Hello, Functional World!
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Hello, F#!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Compare that to the C# version:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="nn">System&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Program&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">static&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">Main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello, F#!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>F# wins on brevity.&lt;/p>
&lt;h3 id="functions-in-f">Functions in F#
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">square&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">square&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Prints 25
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>That’s it. No return types, no explicit &lt;code>public static&lt;/code> nonsense. Just clean, pure function definition.&lt;/p>
&lt;h3 id="pattern-matching-magic">Pattern Matching Magic
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">describeNumber&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">match&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Zero&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;One&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="o">_&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Something else&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">describeNumber&lt;/span> &lt;span class="n">42&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Prints &amp;#34;Something else&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Tell me that doesn’t look cleaner than a bunch of if-statements!&lt;/p>
&lt;h2 id="when-to-use-f">When to Use F#
&lt;/h2>&lt;p>F# isn’t for everything, but it shines in:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Data Science and Analytics&lt;/strong> – It has great libraries for numerical computing.&lt;/li>
&lt;li>&lt;strong>Finance&lt;/strong> – Banks love F# for its precision and reliability.&lt;/li>
&lt;li>&lt;strong>Domain-Driven Design&lt;/strong> – Functional programming fits well with event-driven architectures.&lt;/li>
&lt;li>&lt;strong>Writing Less Code&lt;/strong> – If you’re tired of boilerplate and just want to get stuff done.&lt;/li>
&lt;/ul>
&lt;h2 id="when-not-to-use-f">When Not to Use F#
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>If You Hate Indentation-Based Syntax&lt;/strong> – F# relies on whitespace, so if you’re a &lt;code>{}&lt;/code> fanatic, you might struggle.&lt;/li>
&lt;li>&lt;strong>If You Live in the C# World&lt;/strong> – If your team is all-in on C#, switching to F# might be more pain than it’s worth.&lt;/li>
&lt;li>&lt;strong>If You Need to Work With GUI Apps&lt;/strong> – F# is better suited for backend work.&lt;/li>
&lt;/ul>
&lt;h2 id="the-future-of-f">The Future of F#
&lt;/h2>&lt;p>F# isn’t going anywhere. It’s actively developed and maintained, with strong support from Microsoft and the open-source community. Plus, with .NET evolving rapidly, F# is only getting better.&lt;/p>
&lt;p>If you haven’t tried F# yet, give it a shot. Worst case? You learn something new. Best case? You discover your new favorite language.&lt;/p>
&lt;hr>
&lt;h2 id="key-ideas">Key Ideas
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Concept&lt;/th>
&lt;th>Summary&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Functional Programming&lt;/td>
&lt;td>F# is a functional-first language on .NET.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Concise Syntax&lt;/td>
&lt;td>Less boilerplate compared to C#.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Immutability&lt;/td>
&lt;td>Variables are immutable by default.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pattern Matching&lt;/td>
&lt;td>A powerful alternative to if-else chains.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Interoperability&lt;/td>
&lt;td>F# works seamlessly with .NET libraries.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Use Cases&lt;/td>
&lt;td>Great for data science, finance, and DDD.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="references">References
&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://learn.microsoft.com/en-us/dotnet/fsharp/">F# Official Documentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/dotnet/fsharp">F# GitHub Repository&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://fsharpforfunandprofit.com/">F# for Beginners&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>F# Code Snippets</title><link>https://brianbraatz.github.io/p/fsharp-snippets/</link><pubDate>Wed, 14 Sep 2016 00:00:00 +0000</pubDate><guid>https://brianbraatz.github.io/p/fsharp-snippets/</guid><description>&lt;img src="https://brianbraatz.github.io/post/Articles/IMAGES/fsharp.png" alt="Featured image of post F# Code Snippets" />&lt;h1 id="common-f-code-snippets">Common F# Code Snippets
&lt;/h1> &lt;!-- You Should Know
So you've dipped your toes into F# and want to see some real-world snippets? Good news—I've got you covered! Here are 10 super useful F# snippets, each explained simply. Let’s roll! -->
&lt;h2 id="1-printing-to-the-console">1. Printing to the Console
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Hello, world!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>No need for &lt;code>Console.WriteLine&lt;/code>, just a simple &lt;code>printfn&lt;/code> and you&amp;rsquo;re done!&lt;/p>
&lt;h2 id="2-defining-a-function">2. Defining a Function
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">square&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">square&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 25
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Functions are first-class citizens in F#, and defining one is a breeze.&lt;/p>
&lt;h2 id="3-piping-data--operator">3. Piping Data (&lt;code>|&amp;gt;&lt;/code> Operator)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">square&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">5&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="n">square&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="kt">string&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s&amp;#34;&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="c1">// Outputs: &amp;#34;25&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Piping makes function composition elegant and clean.&lt;/p>
&lt;h2 id="4-pattern-matching">4. Pattern Matching
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">describeNumber&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">match&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Zero&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;One&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="o">_&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Something else&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">describeNumber&lt;/span> &lt;span class="n">42&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: &amp;#34;Something else&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Forget those clunky &lt;code>if-else&lt;/code> chains. Pattern matching is the way to go!&lt;/p>
&lt;h2 id="5-list-comprehensions">5. List Comprehensions
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">numbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="o">..&lt;/span>&lt;span class="n">5&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">squaredNumbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="k">for&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="n">numbers&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="n">squaredNumbers&lt;/span> &lt;span class="c1">// Outputs: [1; 4; 9; 16; 25]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Simple, readable, and efficient.&lt;/p>
&lt;h2 id="6-recursive-functions">6. Recursive Functions
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">rec&lt;/span> &lt;span class="n">factorial&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">1&lt;/span> &lt;span class="k">then&lt;/span> &lt;span class="n">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">factorial&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">n&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">1&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">factorial&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 120
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Because recursion is the functional way!&lt;/p>
&lt;h2 id="7-tuples-and-destructuring">7. Tuples and Destructuring
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">person&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;Alice&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">30&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">age&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">person&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s is %d years old.&amp;#34;&lt;/span> &lt;span class="n">name&lt;/span> &lt;span class="n">age&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Tuple unpacking makes handling grouped data a breeze.&lt;/p>
&lt;h2 id="8-records-lightweight-data-structures">8. Records (Lightweight Data Structures)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">type&lt;/span> &lt;span class="nc">Person&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">{&lt;/span> &lt;span class="n">Name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kt">string&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="n">Age&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">int&lt;/span> &lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">bob&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">{&lt;/span> &lt;span class="n">Name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;Bob&amp;#34;&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="n">Age&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">25&lt;/span> &lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="n">bob&lt;/span> &lt;span class="c1">// Outputs: { Name = &amp;#34;Bob&amp;#34;; Age = 25 }
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Simple, structured data without the C# verbosity.&lt;/p>
&lt;h2 id="9-option-type-no-more-nulls">9. Option Type (No More Nulls!)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">divide&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="k">then&lt;/span> &lt;span class="n">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span> &lt;span class="n">Some&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">match&lt;/span> &lt;span class="n">divide&lt;/span> &lt;span class="n">10&lt;/span> &lt;span class="n">2&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Some&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Result: %d&amp;#34;&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">None&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Cannot divide by zero!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>F# says &amp;ldquo;nope&amp;rdquo; to nulls, and we love it.&lt;/p>
&lt;h2 id="10-asynchronous-code">10. Asynchronous Code
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">open&lt;/span> &lt;span class="nn">System.Threading.Tasks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">asyncExample&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">async&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">do&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Sleep&lt;/span> &lt;span class="n">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Task Complete!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Start&lt;/span> &lt;span class="n">asyncExample&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;!--
Asynchronous programming made simple and elegant.
---
## Key Ideas
| Concept | Summary |
|-----------------------|------------------------------------------------|
| Printing | `printfn` for easy console output |
| Functions | Clean and simple function definitions |
| Piping | `|>` for smooth function composition |
| Pattern Matching | A powerful alternative to `if-else` |
| Lists | Comprehensions for easy transformations |
| Recursion | Functional approach to loops |
| Tuples &amp; Records | Structured, immutable data |
| Option Type | Eliminates `null` values |
| Async Programming | Lightweight, elegant async operations |
---
## References
- [F# Official Docs](https://learn.microsoft.com/en-us/dotnet/fsharp/)
- [F# for Fun and Profit](https://fsharpforfunandprofit.com/)
- [F# Snippets](https://fssnip.net/)
-->
&lt;!--
---
title: "10 More Common F# Code Snippets You Should Know"
description: "10 More Common F# Code Snippets You Should Know"
slug: "10-more-common-fsharp-snippets"
date: 2018-06-07
image: "post/Articles/IMAGES/37.jpg"
categories: ["F#", "Functional Programming", "Code Snippets"]
tags: ["F#", "Functional Programming", "Code Snippets", ".NET"]
draft: false
weight: 723
---
# 10 More Common F# Code Snippets You Should Know
You thought 10 snippets were enough? Nah, let's keep going! Here are 10 more awesome F# snippets, picking up right where we left off. Get ready to level up! -->
&lt;h2 id="11-sequences-lazy-evaluation">11. Sequences (Lazy Evaluation)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">infiniteNumbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">initInfinite&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">infiniteNumbers&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">take&lt;/span> &lt;span class="n">5&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">toList&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: [0; 1; 4; 9; 16]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Need an infinite list but don&amp;rsquo;t want to destroy your RAM? Sequences to the rescue!&lt;/p>
&lt;h2 id="12-higher-order-functions">12. Higher-Order Functions
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">applyTwice&lt;/span> &lt;span class="n">f&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">double&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">applyTwice&lt;/span> &lt;span class="kt">double&lt;/span> &lt;span class="n">3&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 12
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Functions that take functions and return functions? Welcome to functional programming!&lt;/p>
&lt;h2 id="13-discriminated-unions">13. Discriminated Unions
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">type&lt;/span> &lt;span class="nc">Shape&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Circle&lt;/span> &lt;span class="k">of&lt;/span> &lt;span class="kt">float&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Rectangle&lt;/span> &lt;span class="k">of&lt;/span> &lt;span class="kt">float&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="kt">float&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">area&lt;/span> &lt;span class="n">shape&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">match&lt;/span> &lt;span class="n">shape&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Circle&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="nn">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nn">Math&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">PI&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">r&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Rectangle&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">h&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">w&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Circle area: %f&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">area&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">Circle&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="o">))&lt;/span> &lt;span class="c1">// Outputs: Circle area: 78.54
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>A clean and powerful way to model data variations.&lt;/p>
&lt;h2 id="14-using-the-map-function">14. Using the &lt;code>map&lt;/code> Function
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">numbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="o">..&lt;/span>&lt;span class="n">5&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">squared&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">numbers&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">List&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">map&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="n">squared&lt;/span> &lt;span class="c1">// Outputs: [1; 4; 9; 16; 25]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Apply a function to every element of a list with zero fuss.&lt;/p>
&lt;h2 id="15-folding-reduce-in-other-languages">15. Folding (Reduce in Other Languages)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">sum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nn">List&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">fold&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">acc&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">acc&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="o">..&lt;/span>&lt;span class="n">5&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="c1">// Outputs: 15
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Folding is just a fancy way of saying &amp;ldquo;reduce everything to a single value.&amp;rdquo;&lt;/p>
&lt;h2 id="16-working-with-dictionaries">16. Working with Dictionaries
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">dict&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dict&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="s">&amp;#34;one&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">1&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="s">&amp;#34;two&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">2&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="s">&amp;#34;three&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">3&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">dict&lt;/span>&lt;span class="o">.[&lt;/span>&lt;span class="s">&amp;#34;two&amp;#34;&lt;/span>&lt;span class="o">])&lt;/span> &lt;span class="c1">// Outputs: 2
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Need key-value pairs? Dictionaries got you covered.&lt;/p>
&lt;h2 id="17-using-trywith-for-exception-handling">17. Using &lt;code>try...with&lt;/code> for Exception Handling
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">safeDivide&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Some&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="o">:?&lt;/span> &lt;span class="nn">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DivideByZeroException&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">match&lt;/span> &lt;span class="n">safeDivide&lt;/span> &lt;span class="n">10&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Some&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Result: %d&amp;#34;&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">None&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Oops! Division by zero.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Because sometimes, life (and division) throws you an error.&lt;/p>
&lt;h2 id="18-using-async-workflows">18. Using &lt;code>async&lt;/code> Workflows
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">asyncJob&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">async&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">do&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Sleep&lt;/span> &lt;span class="n">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Done sleeping!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Start&lt;/span> &lt;span class="n">asyncJob&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Non-blocking, super clean asynchronous programming.&lt;/p>
&lt;h2 id="19-partial-application">19. Partial Application
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">multiply&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">double&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">multiply&lt;/span> &lt;span class="n">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="kt">double&lt;/span> &lt;span class="n">10&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 20
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Fix arguments ahead of time for ultimate function reusability!&lt;/p>
&lt;h2 id="20-using-seqfilter-for-filtering-data">20. Using &lt;code>Seq.filter&lt;/code> for Filtering Data
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">numbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="o">..&lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">evens&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">numbers&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">List&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">filter&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">0&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="n">evens&lt;/span> &lt;span class="c1">// Outputs: [2; 4; 6; 8; 10]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Elegant, readable, and functional filtering.&lt;/p>
&lt;!--
---
## Key Ideas
| Concept | Summary |
|-----------------------|------------------------------------------------|
| Sequences | Lazy evaluation for memory efficiency |
| Higher-Order Functions | Functions that operate on other functions |
| Discriminated Unions | Define complex types in a simple way |
| Mapping &amp; Folding | Transform and reduce collections elegantly |
| Dictionaries | Easy key-value pair handling |
| Exception Handling | `try...with` for catching errors |
| Async Workflows | Elegant, non-blocking programming |
| Partial Application | Bind arguments early for flexibility |
| Filtering Data | Use `filter` to extract what you need |
---
## References
- [F# Official Docs](https://learn.microsoft.com/en-us/dotnet/fsharp/)
- [F# for Fun and Profit](https://fsharpforfunandprofit.com/)
- [F# Snippets](https://fssnip.net/)
-->
&lt;!--
---
title: "10 Advanced F# Code Snippets You Should Know"
description: "10 Advanced F# Code Snippets You Should Know"
slug: "10-advanced-fsharp-snippets"
date: 2019-02-18
image: "post/Articles/IMAGES/29.jpg"
categories: ["F#", "Functional Programming", "Advanced Code Snippets"]
tags: ["F#", "Functional Programming", "Code Snippets", ".NET", "Advanced"]
draft: false
weight: 612
---
# 10 Advanced F# Code Snippets You Should Know
Alright, we’ve gone through 20 essential F# snippets already. Still with me? Good! Now, let’s get into some more advanced F# goodness. Buckle up! -->
&lt;h2 id="21-function-composition--operator">21. Function Composition (&lt;code>&amp;gt;&amp;gt;&lt;/code> Operator)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">add2&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">multiply3&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">addThenMultiply&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">add2&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">multiply3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">addThenMultiply&lt;/span> &lt;span class="n">4&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 18
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Think of &lt;code>&amp;gt;&amp;gt;&lt;/code> as piping without explicit arguments. Super clean!&lt;/p>
&lt;h2 id="22-defining-custom-operators">22. Defining Custom Operators
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="o">(++)&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">5&lt;/span> &lt;span class="o">++&lt;/span> &lt;span class="n">3&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 11
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Why use boring old operators when you can make your own?&lt;/p>
&lt;h2 id="23-using-the-yield-keyword-in-sequences">23. Using the &lt;code>yield&lt;/code> Keyword in Sequences
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">numbers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">seq&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="n">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="n">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">3&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="n">4&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">numbers&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">toList&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: [1; 2; 3; 4; 5]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>yield!&lt;/code> lets you expand another sequence inside your own.&lt;/p>
&lt;h2 id="24-type-providers-for-easy-data-access">24. Type Providers for Easy Data Access
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#r&lt;/span> &lt;span class="s">&amp;#34;nuget: FSharp.Data&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">open&lt;/span> &lt;span class="nn">FSharp.Data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">csv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">CsvProvider&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="s">&amp;#34;Name,Age&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">Alice,30&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">Bob,25&amp;#34;&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">csv&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GetSample&lt;/span>&lt;span class="bp">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">row&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Rows&lt;/span> &lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s is %d years old&amp;#34;&lt;/span> &lt;span class="n">row&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Name&lt;/span> &lt;span class="n">row&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Age&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Type providers give you strongly-typed access to external data. No manual parsing required!&lt;/p>
&lt;h2 id="25-asynchronous-parallel-computation">25. Asynchronous Parallel Computation
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">open&lt;/span> &lt;span class="nn">System.Threading.Tasks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">task1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">async&lt;/span> &lt;span class="o">{&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">5&lt;/span> &lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">task2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">async&lt;/span> &lt;span class="o">{&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">10&lt;/span> &lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">combined&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Parallel&lt;/span> &lt;span class="o">[&lt;/span>&lt;span class="n">task1&lt;/span>&lt;span class="o">;&lt;/span> &lt;span class="n">task2&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nn">Async&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">RunSynchronously&lt;/span> &lt;span class="n">combined&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="c1">// Outputs: [|5; 10|]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Run multiple async tasks in parallel like a pro.&lt;/p>
&lt;h2 id="26-memoization-caching-function-results">26. Memoization (Caching Function Results)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">memoize&lt;/span> &lt;span class="n">f&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">let&lt;/span> &lt;span class="nv">cache&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nn">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nn">Collections&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nn">Generic&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dictionary&lt;/span>&lt;span class="o">&amp;lt;_,&lt;/span> &lt;span class="o">_&amp;gt;&lt;/span>&lt;span class="bp">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">cache&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ContainsKey&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="k">then&lt;/span> &lt;span class="n">cache&lt;/span>&lt;span class="o">.[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">let&lt;/span> &lt;span class="nv">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span> &lt;span class="n">x&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cache&lt;/span>&lt;span class="o">.[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">expensiveComputation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">memoize&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">expensiveComputation&lt;/span> &lt;span class="n">10&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: 1000
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Memoization = automatic caching for expensive functions.&lt;/p>
&lt;h2 id="27-active-patterns-for-smart-matching">27. Active Patterns for Smart Matching
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="o">(|&lt;/span>&lt;span class="n">Even&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="n">Odd&lt;/span>&lt;span class="o">|)&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="k">then&lt;/span> &lt;span class="n">Even&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="n">Odd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">describeNumber&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">match&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="k">with&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Even&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Even number&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">Odd&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="s">&amp;#34;Odd number&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%s&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">describeNumber&lt;/span> &lt;span class="n">5&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: Odd number
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Active patterns let you create custom match cases for cleaner logic.&lt;/p>
&lt;h2 id="28-infinite-lazy-sequences">28. Infinite Lazy Sequences
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">rec&lt;/span> &lt;span class="n">fibs&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">seq&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="n">fibs&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%A&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">fibs&lt;/span> &lt;span class="n">0&lt;/span> &lt;span class="n">1&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">take&lt;/span> &lt;span class="n">10&lt;/span> &lt;span class="o">|&amp;gt;&lt;/span> &lt;span class="nn">Seq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">toList&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Lazy evaluation lets you generate infinite sequences without crashing your machine.&lt;/p>
&lt;h2 id="29-using-mailboxprocessor-for-actor-based-concurrency">29. Using &lt;code>MailboxProcessor&lt;/code> for Actor-Based Concurrency
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">agent&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nn">MailboxProcessor&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Start&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="k">fun&lt;/span> &lt;span class="n">inbox&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">let&lt;/span> &lt;span class="nv">rec&lt;/span> &lt;span class="n">loop&lt;/span> &lt;span class="bp">()&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">async&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">let!&lt;/span> &lt;span class="nv">msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">inbox&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Receive&lt;/span>&lt;span class="bp">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Received: %s&amp;#34;&lt;/span> &lt;span class="n">msg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="n">loop&lt;/span>&lt;span class="bp">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">loop&lt;/span>&lt;span class="bp">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">agent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Post&lt;/span> &lt;span class="s">&amp;#34;Hello, F#&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>MailboxProcessor is a great way to handle message-based concurrency.&lt;/p>
&lt;h2 id="30-dependency-injection-with-partial-application">30. Dependency Injection with Partial Application
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fsharp" data-lang="fsharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">log&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;Log: %s&amp;#34;&lt;/span> &lt;span class="n">message&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">add&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">y&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">let&lt;/span> &lt;span class="nv">addWithLogging&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">fun&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">sprintf&lt;/span> &lt;span class="s">&amp;#34;Adding %d and %d&amp;#34;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">add&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="n">y&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printfn&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">addWithLogging&lt;/span> &lt;span class="n">3&lt;/span> &lt;span class="n">7&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1">// Outputs: Log: Adding 3 and 7, then 10
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Inject dependencies (like logging) into your functions using partial application.&lt;/p>
&lt;!-- ---
## Key Ideas
| Concept | Summary |
|-----------------------|------------------------------------------------|
| Function Composition | `>>` for composing functions seamlessly |
| Custom Operators | Define your own operators for better readability |
| Yield in Sequences | `yield!` for working with sequence expressions |
| Type Providers | Strongly-typed access to external data |
| Parallel Computation | `Async.Parallel` for running tasks concurrently |
| Memoization | Cache expensive function results |
| Active Patterns | Custom pattern matching cases |
| Lazy Sequences | Generate infinite sequences safely |
| MailboxProcessor | Actor-based concurrency for message handling |
| Dependency Injection | Use partial application for injecting dependencies | -->
&lt;hr>
&lt;h2 id="references">References
&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://learn.microsoft.com/en-us/dotnet/fsharp/">F# Official Docs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://fsharpforfunandprofit.com/">F# for Fun and Profit&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://fssnip.net/">F# Snippets&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>