# Presentation

## Slides

This git-book is here to supplement training sessions I've conducted using slides located in this repository:

{% embed url="<https://github.com/rdeneau/formation-fsharp/tree/main/en>" %}

* Written in markdown with marp / marpit
* Outputs available in HTML and PDF files
* The theme can be customized: it's "just" CSS and PNG files.

## Author

Romain DENEAU

* Senior Developer F♯ C♯ TypeScript
* Github [/rdeneau](https://github.com/rdeneau)
* Linked-in [romain-deneau](https://www.linkedin.com/in/romain-deneau-95481143/)
* ~~Twitter/X~~ [~~@DeneauRomain~~](https://x.com/DeneauRomain)

## Why F♯

[Answer in a single tweet](https://nitter.net/MokoSharma/status/1458151277343379457) :

<figure><img src="/files/k8EYZHbkmHxDgECObXyg" alt=""><figcaption></figcaption></figure>

In detail :

* Multi-paradigm language with a strong functional orientation
  * Functional programming *(FP)* principles: immutability and composition
  * Building blocks: functions and algebraic data types *(ADT)*
* "Fun" ! Very pleasant to write and read
  * Expressive and concise (not very verbose syntax)
  * Sensitive to indentation → easy to read
  * Strong static typing but it's almost seamless thanks to type inference
* Language entreprise-friendly
  * Runs on the .NET platform → high performance, easy interop with C# projects, .NET ecosystem and libraries
  * Very good tooling: Visual Studio, VsCode, Rider
  * Robust code: predictable and reproducible results (immutability, structural equality, no nulls, exhaustive pattern matching)
  * Interactive programming: check code by evaluating it in the FSI console
  * Narrowed community but strong and friendly
* F♯ compared to other back-end functional languages
  * Its syntax is not hybrid, unlike **Scala** and **Kotlin** (mixing OOP and FP)
  * Easier to learn than **Haskell** or **OCaml** *(but with fewer FP features, partially compensated for by OOP features)*
  * Static typing, unlike **Closure** *(and far fewer brackets 😜)*

## Convention

📍 → concept addressed later, generally with the associated link

💥 → compilation error or runtime exception

🚀 → more advanced chapters

🍔 or 🎲 → Quiz

📜 → Summary

## Target audience

C# Developers - .NET SDK installed on your machine\
Notions in JavaScript/TypeScript can be helpful when we compare the languages

{% hint style="success" %}

#### Perform the training yourself

As a F# developer in a .NET team using only C#, feel free to use these materials (both git-book and slides) to train your team.

💡 The theme can be customized: it's "just" CSS and PNG files.
{% endhint %}

## Changelog

### 2025-08-21

* Improve [Functional patterns](/fsharp-training/monadic-types/4-functional-pattern.md)
* Improve [Computation expression (CE)](/fsharp-training/monadic-types/5-computation-expressions.md)
* Fix a lot of typos (with the help of Copilot)

### 2025-05-13

* Dedicated page to cover everything regarding [Exceptions](/fsharp-training/fundamentals/2-syntax/exceptions.md)
* Misc. precisions regarding [Asynchronous programming](/fsharp-training/asynchronous-programming/1-async-workflow.md)

### 2025-04-02

* Translation from [French](https://rdeneau.gitbook.io/formation-fsharp-fr)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rdeneau.gitbook.io/fsharp-training/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
