jonnifyfsharp

A jonnify course

F#
In Depth

The ML-family language on .NET — typed, functional, pragmatic — taught from first principles.

Six chapters: where F# comes from, the language in depth, bridges for C# and Elixir developers, algorithms & data structures, and a real DevOps tool built end to end. C1–C3 run nine modules of three dives each; C4 re-derives the Elixir course’s twelve-module algorithms arc in F#; C5 ships a working F# tool. The code is idiomatic and runnable; the diagrams compute the real thing.

fun |> >>

How to read this

F# is a functional-first language in the ML family, running on the same .NET runtime as C#. This course takes it seriously — not as a curiosity beside C#, but as a complete way to build software: types that make illegal states unrepresentable, immutability by default, and composition as the primary verb.

The shape is deliberate. History shows where the ideas come from; the language chapter teaches F# in depth on its own terms; the C# and Elixir bridges translate the habits you already have from each community; algorithms put the language under load — the same twelve-module arc the Elixir course runs, re-derived in F#; and pragmatic programming ships a real DevOps tool. Each chapter reuses the one before it.

Pick a chapter from the arc below to see what it covers and what it stands on. The full module directory follows.

The arc · select a chapter

0 History 1 Language 2 for C# 3 for Elixir 4 Algorithms 5 DevOps start ship
History

Where F# comes from — the ML lineage and the .NET runtime.

C0 · chapter 2 modules The ground floor: no prerequisites.
C0 · History — in progress

The course is one curve, not six disconnected topics. Read it in order and each chapter is a consequence of the last.

One idea, early: composition

The thread that runs through every chapter is composition. F# gives it two operators you will reach for constantly: the pipe |>, which feeds a value left-to-right into the next function, and forward composition >>, which glues two functions into one. Both read in the order the work happens.

Three pure functions are wired below: double maps x to 2x, increment adds one, and square maps x to x². Set the input, toggle which functions take part, and watch the F# pipeline and its result rebuild.

The pipe · build a pipeline

3
3
|> double     // => 6
|> increment  // => 7
|> square     // => 49
3 ▷ 6 ▷ 7 ▷ 49  = 49

A pipeline reads left to right: x |> f |> g is g(f(x)). Turn every function off and the pipeline is the identity — it returns its input untouched. C1.04 makes |>, >>, and their laws precise.

The map

The full course, chapter by chapter. Every module here is specified and on the way; as each ships it becomes a live link. The final module of each chapter is a hands-on, richly visual lab.

live chapter front door built lesson ready planned drafted, on the way soon specified
C0

History

Open chapter →

Where F# comes from — the ML lineage and the .NET runtime. Two modules, three dives each.

C1

F# Language

Open chapter →

The language in depth, on its own terms. Nine modules, three dives each.

C2

F# for C# developers

Open chapter →

Translate every C# habit into its idiomatic F# form. Nine modules, three dives each.

C3

F# for Elixir developers

Open chapter →

The developer’s journey to F#, coming from Elixir — the Elixir-community parallel to C2. Nine modules, three dives each.

C3.01built

Two functional runtimes — the BEAM & the CLR

What carries over from the BEAM, and what the managed runtime changes.

C3.02built

From dynamic to static types

Type inference, and making illegal states unrepresentable.

C3.03built

Pattern matching, sharpened

Familiar ground, plus exhaustiveness and active patterns.

C3.04soon

The pipe you already know (+ composition)

The same |>, plus forward composition >>.

C3.05soon

Tuples & atoms → records & unions

Typed product and sum types for tuples and atoms.

C3.06soon

{:ok, _} / {:error, _} → Result & Option

The tagged tuples you return, as types.

C3.07soon

Processes & GenServer → MailboxProcessor

F#’s actor, async workflows, and what OTP adds.

C3.08soon

Protocols & behaviours → interfaces

Interfaces and object expressions for protocols.

C3.09soon

Mix & OTP → dotnet & .NET

A lab: the dotnet CLI, project structure, a first app.

C4

Algorithms & Data Structures

The Elixir course’s E4 arc, re-derived in F# — from lists to branded CHAMP tries — each cross-linked to its E4 sibling with notes on the F# implementation and its efficiency. Twelve modules.

C5

Pragmatic Programming — DevOps Tools

Ship a real F# DevOps tool end to end — the practical project and workshop, grounded in a working F#/.NET codebase. Nine modules.

C5.01soon

Foundations

Start thin: a running tool and a clean solution layout from day one.

C5.02soon

Modeling the domain

Log records, releases & hosts as records and discriminated unions.

C5.03soon

The pure analysis core

Parsing and aggregation as pure F# — the library at the centre.

C5.04soon

Server-side HTML in F#

The host: rendering HTML without templates or a framework.

C5.05soon

A JSON API & external integration

Talking to an external service; auth and polling in F#.

C5.06soon

Fable — F# to JavaScript on the client

One language across the wire; no Node bundler, no TypeScript.

C5.07soon

Pragmatic testing

Testing the pure core with xUnit; properties over examples.

C5.08soon

Packaging & deployment

A Dockerfile, a single-file publish, and going live.

C5.09soon

Workshop: ship the DevOps dashboard

The capstone: assemble the tool end to end and deploy it.