diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc
index 5a962989..2b87b3cf 100644
--- a/.markdownlint-cli2.jsonc
+++ b/.markdownlint-cli2.jsonc
@@ -2,12 +2,15 @@
"config": {
// Enable all rules by default
"default": true,
- // Line length: increase default from 80
- "MD013": {
- "line_length": 100,
- "code_blocks": false,
- "tables": false
+ // Heading increment: disabled because Jekyll layouts provide h1;
+ // content pages intentionally start at h2/h3
+ "MD001": false,
+ // Heading style: standardize on atx (no closing hashes)
+ "MD003": {
+ "style": "atx"
},
+ // Line length: disabled
+ "MD013": false,
// Allow duplicate headers in different nested sections
"MD024": {
"allow_different_nesting": true
@@ -15,6 +18,10 @@
// Allow inline HTML
"MD033": false,
// First line in a file doesn't need to be a top-level header
- "MD041": false
+ "MD041": false,
+ // Code block style: standardize on fenced
+ "MD046": {
+ "style": "fenced"
+ }
}
}
diff --git a/README.md b/README.md
index 3458d2e0..0ed5158a 100644
--- a/README.md
+++ b/README.md
@@ -34,24 +34,26 @@ Note also the use of an excerpt separator ``. This is to ensure that
Example:
- ---
- order: 0
- title: HelloWorld.fs
- excerpt_separator:
- code: |
- let hello name =
- printfn $"Hello, {name}!"
-
- hello "github"
- ---
- ## I am the title
-
- I am the introdoctory paragraph. Mobile and desktop users can see me.
-
- - **Desktop users** can see this extra content
- - **Mobile users** will miss out
-
- Not ideal, but oh well.
+```yaml
+---
+order: 0
+title: HelloWorld.fs
+excerpt_separator:
+code: |
+ let hello name =
+ printfn $"Hello, {name}!"
+
+ hello "github"
+---
+## I am the title
+
+I am the introdoctory paragraph. Mobile and desktop users can see me.
+
+- **Desktop users** can see this extra content
+- **Mobile users** will miss out
+
+Not ideal, but oh well.
+```
## Developing locally
@@ -71,7 +73,7 @@ If not using VSCode, consult your preferred IDE's documentation for instructions
You may need to run the following once to install TailwindCSS dependency:
-```
+```sh
npm i
```
diff --git a/_books/stylish_f#_6_2022.md b/_books/stylish_f#_6_2022.md
index cb3a9426..52309e36 100644
--- a/_books/stylish_f#_6_2022.md
+++ b/_books/stylish_f#_6_2022.md
@@ -9,7 +9,7 @@ Why just get by in F# when you can program in style. This book goes beyond synta
_Stylish F# 6_ covers every design decision that a developer makes in constructing F# programs, helping you make the most educated and valuable design choices at every stage of code development. You will learn about the design of types and function signatures, the benefits of immutability, and the uses of partial function application. You will understand best practices for writing APIs to be used by F#, C#, and other languages. Each carefully vetted design choice is supported with compelling examples, illustrations, and rationales.
-**What You Will Learn**
+### What You Will Learn
- Know why, when, and how to code in immutable style
- Use collection functions, piping, and function composition to build working software quickly
diff --git a/_testimonials/JamieDixon.md b/_testimonials/JamieDixon.md
index 1ef489f8..b36e6e65 100644
--- a/_testimonials/JamieDixon.md
+++ b/_testimonials/JamieDixon.md
@@ -9,10 +9,10 @@ keywords:
- open data
quote: F# makes it easy to spend your time answering interesting questions about the domain and less time answering questions about the language.
---
-I did a public records request in my town of Cary, North Carolina. The dataset included appx 25,000 traffic stop records for 2012. Using F#, I did some basic statistical calculations to determine that when you are driving is much more important than where you are driving in terms of getting stopped. In fact, the term 'speed trap' is a misnomer. In addition, the data supports the notion that there is a monthly quota of tickets being given. You can read the entire analysis [here](http://jamessdixon.wordpress.com/2014/01/07/traffic-stop-analysis-using-f/)
+I did a public records request in my town of Cary, North Carolina. The dataset included appx 25,000 traffic stop records for 2012. Using F#, I did some basic statistical calculations to determine that when you are driving is much more important than where you are driving in terms of getting stopped. In fact, the term 'speed trap' is a misnomer. In addition, the data supports the notion that there is a monthly quota of tickets being given. You can read the [entire analysis](http://jamessdixon.wordpress.com/2014/01/07/traffic-stop-analysis-using-f/)
-Also, I created a KNN classifier using the date/time of the stop and determined that when you get stopped impacts weather you get a verbal warning versus an actual ticket. You can read the entire analysis [here](http://jamessdixon.wordpress.com/2014/01/14/traffic-stop-disposition-classification-using-f-and-knn/)
+Also, I created a KNN classifier using the date/time of the stop and determined that when you get stopped impacts weather you get a verbal warning versus an actual ticket. You can read the [entire analysis](http://jamessdixon.wordpress.com/2014/01/14/traffic-stop-disposition-classification-using-f-and-knn/)
-Finally, I did a public records request in the county in which I live: Wake County North Carolina. The dataset included appx 5,000 health inspection scores for 2012. Using F#, I did some basic statistical calculations to determine that there is little variance of when a restaurant gets inspected and their final score. An interesting offshoot is that some particular restaurants scored lower across all inspectors - except when head inspector did the inspection, then they actually scored better. There might an inherent cultural bias by the inspectors. You can read the entire analysis [here](http://jamessdixon.wordpress.com/2014/02/11/analysis-of-health-inspection-data-using-f/)
+Finally, I did a public records request in the county in which I live: Wake County North Carolina. The dataset included appx 5,000 health inspection scores for 2012. Using F#, I did some basic statistical calculations to determine that there is little variance of when a restaurant gets inspected and their final score. An interesting offshoot is that some particular restaurants scored lower across all inspectors - except when head inspector did the inspection, then they actually scored better. There might an inherent cultural bias by the inspectors. You can read the [entire analysis](http://jamessdixon.wordpress.com/2014/02/11/analysis-of-health-inspection-data-using-f/)
F# was great because I spent less time figuring out how to answer my question and more time actually answering the question. The type providers made consuming and integrating hetrogenous datasets a snap and the pattern matching feature reduced the complexity of the code by an order of magnitude (compared to C#). Finally, by using unit tests and immutable data types, I have a bug-resistant code base that can be extended to other scenarios.
diff --git a/_testimonials/anonymous-game-developer.md b/_testimonials/anonymous-game-developer.md
index 37a7fcfd..ddaa380d 100644
--- a/_testimonials/anonymous-game-developer.md
+++ b/_testimonials/anonymous-game-developer.md
@@ -16,4 +16,4 @@ Dynamic languages like Python hid the types, but sacrificed the type safety that
F# finally gives me the best of both worlds: C#'s power without manual type annotations.
I'm still a beginner (no quizzes please—I'm soaking it in slowly!),
-but that rare 'this is exactly what I’ve been searching for' feeling? F# delivers that. Truly refreshing.
\ No newline at end of file
+but that rare 'this is exactly what I've been searching for' feeling? F# delivers that. Truly refreshing.
diff --git a/_testimonials/goswin-1.md b/_testimonials/goswin-1.md
index 78801a36..30e8b5ff 100644
--- a/_testimonials/goswin-1.md
+++ b/_testimonials/goswin-1.md
@@ -11,7 +11,7 @@ keywords:
- Rhino
quote: We see great potential for F# to be used as a scripting language in CAD; it fits very well for computational design challenges in the construction industry.
---
-
+
In recent years many Architects have discovered that they can greatly enlarge their design repertoire by the use of parametric design, programming or scripting. Architects can now quickly and easily explore new geometries previously unseen in Architecture. Besides being designed in a novel way these geometries can also be exactly represented and reasoned about in terms of structural feasibility and manufacturing constraints. These facts take new geometries out of the dreams of Architects and make them real candidates for construction.
diff --git a/_testimonials/peter-sestoft-1.md b/_testimonials/peter-sestoft-1.md
index 5d675cc0..928641d2 100644
--- a/_testimonials/peter-sestoft-1.md
+++ b/_testimonials/peter-sestoft-1.md
@@ -13,4 +13,4 @@ F# has a beautiful, simple but expressive language at its core, and many powerfu
built around that core language. It can draw on all the power of the .NET libraries,
and runs on Windows, MacOS and Linux. That's the reason we have chosen F# for our
undergraduate functional programming class as well as our
-undergraduate programming language class [(link)](http://www.itu.dk/people/sestoft/plc/)
+undergraduate [programming language class](http://www.itu.dk/people/sestoft/plc/)
diff --git a/docs/index.md b/docs/index.md
index 97c1ad9e..69f6d855 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -21,7 +21,7 @@ algorithm, expressions, patterns and other.
## [F# Cheat Sheet](https://github.com/fsprojects/fsharp-cheatsheet)
-
+
The cheat sheet is a small and concise guide to F# syntax for newcomers to get started with the language. It's available in [HTML](https://fsprojects.github.io/fsharp-cheatsheet/) and [PDF](https://fsprojects.github.io/fsharp-cheatsheet/fsharp-cheatsheet.pdf) format.
diff --git a/guides/enterprise/index.md b/guides/enterprise/index.md
index f01b8467..fb4e1e35 100644
--- a/guides/enterprise/index.md
+++ b/guides/enterprise/index.md
@@ -63,13 +63,13 @@ Many developers have posted on why they like F#:
* [Why F#?](http://davefancher.com/2013/01/27/why-f/)
* [A list of many other "Why F#" posts](https://sergeytihon.wordpress.com/2013/03/24/why-f-by-f-weekly/).
-### A tour of F# features ###
+### A tour of F# features
* [An introduction to F#](https://channel9.msdn.com/blogs/pdc2008/tl11) (video).
* [Why use F#?](http://fsharpforfunandprofit.com/series/why-use-fsharp.html).
This series of posts will give you a guided tour through the main features of F#.
-### Low risk ways to use F# ###
+### Low risk ways to use F\#
You can easily try out F# for non-critical development tasks such as testing and scripting without committing to wholesale change.
@@ -159,14 +159,14 @@ a safer Async library,
a built-in actor model that's easier than using threads,
safe parallelization with immutable data, and more.
-#### Asynchronous programming in F# ####
+#### Asynchronous programming in F\#
* [Async in C# and F#: An introduction](http://tomasp.net/blog/csharp-fsharp-async-intro.aspx/)
* [Async in C# and F#: Asynchronous gotchas in C#](http://tomasp.net/blog/csharp-async-gotchas.aspx/). Why the F# async library is safer than the C# one.
* [Writing non-blocking user-interfaces in F#](http://tomasp.net/blog/async-non-blocking-gui.aspx/)
* [Asynchronous programming: another introduction](http://fsharpforfunandprofit.com/posts/concurrency-async-and-parallel/)
-#### Agents and message queues ####
+#### Agents and message queues
* [An Introduction To F# Agents](http://www.developerfusion.com/article/139804/an-introduction-to-f-agents/)
* [Agents](http://fsharpforfunandprofit.com/posts/concurrency-actor-model/). Another introduction
diff --git a/learn/index.md b/learn/index.md
index aab37bb2..f51a8d7e 100644
--- a/learn/index.md
+++ b/learn/index.md
@@ -30,14 +30,14 @@ Whether it's your first programming language or your next, F# will transform you
### [F# for C#, Java or Python developers](http://fsharpforfunandprofit.com/)
-
+
Introduces you to F# and show you ways that F# can help in day-to-day development
of mainstream commercial business software.
### [F# Cheat Sheet](http://fsprojects.github.io/fsharp-cheatsheet/)
-
+
The cheat sheet is a small and concise guide to F# syntax for newcomers to get started with the language. It's available in [HTML](http://fsprojects.github.io/fsharp-cheatsheet/) and [PDF](https://fsprojects.github.io/fsharp-cheatsheet/fsharp-cheatsheet.pdf) format.
diff --git a/specs/language-spec/index.md b/specs/language-spec/index.md
index c1f2dbea..f972a76b 100644
--- a/specs/language-spec/index.md
+++ b/specs/language-spec/index.md
@@ -79,4 +79,4 @@ The latest, working version of the F# language specification.
* The [preview RFCs beyond F# 9](https://github.com/fsharp/fslang-design/tree/master/preview)
**Note:** We're currently working on an improved version of the F# language specification
-[here](https://github.com/fsharp/fslang-spec/). Contributions welcome!
+[on GitHub](https://github.com/fsharp/fslang-spec/). Contributions welcome!
diff --git a/teaching/index.md b/teaching/index.md
index 16402bbe..9e0d27a7 100644
--- a/teaching/index.md
+++ b/teaching/index.md
@@ -15,7 +15,7 @@ This page lists some resources for teaching F# in formal settings.
for the course "Programs as data" that uses the functional programming concepts in F# to
teach students language concepts and implementation details.
-
+
#### [Functional Programming Using F#](http://www.imm.dtu.dk/~mire/FSharpBook)
@@ -33,7 +33,7 @@ mini-projects are found [on the book web site](http://www.imm.dtu.dk/~mire/FShar
+
#### [Programming Language Concepts](http://www.amazon.com/Programming-Language-Concepts-Undergraduate-Computer/dp/1447141555)
diff --git a/teaching/research.md b/teaching/research.md
index aee8f769..342bef18 100644
--- a/teaching/research.md
+++ b/teaching/research.md
@@ -42,9 +42,9 @@ To add a paper to this list [edit this page](https://github.com/fsharp/fsharp.or
--------------
-## The History of F #
+## The History of F\# {#history-and-design}
-{: #history-and-design .anchor }
+{: .anchor }
### [The Early History of the F# Language](https://dl.acm.org/doi/pdf/10.1145/3386325)
@@ -209,9 +209,9 @@ Accelerator libraries, and dynamic native-code compilation via LINQ.
--------------
-## Parallel and Distributed programming
+## Parallel and Distributed programming {#distributed-and-parallel-programming}
-{: #distributed-and-parallel-programming .anchor }
+{: .anchor }
### [MBrace: cloud computing with monads](http://dl.acm.org/citation.cfm?id=2525531&dl=ACM&coll=DL&CFID=454202220&CFTOKEN=25283533)
@@ -554,7 +554,6 @@ helps to seamlessly scale into the cloud desktop and mobile web applications wit
### [GLR-based abstract parsing](http://dl.acm.org/citation.cfm?id=2556616&dl=ACM&coll=DL), [video (in russian)](http://vimeo.com/79442837)
Semen Grigorev, Saint Petersburg State University, Iakov Kirilenko, Saint Petersburg State University
-
_Central & Eastern European Software Engineering Conference in Russia (CEE-SECR '13) 2013_
Abstract parsing is an important step of the processing of dynamically constructed statements or string-embedded
diff --git a/use/linux/index.md b/use/linux/index.md
index d4b4d4be..925205d8 100644
--- a/use/linux/index.md
+++ b/use/linux/index.md
@@ -27,9 +27,9 @@ dotnet fsi hello.fsx
If this is your first time using .NET, there will be a short, one-time message about using the .NET SDK. After that, you'll see the following output in your console:
-
- Hello World from F#
-
+```text
+Hello World from F#
+```
To create a project use
@@ -60,7 +60,9 @@ F# is supported by the [Ionide](http://ionide.io/) project.
3. Press `Ctrl+Shift+P` and enter the following to install the Ionide package for VS Code.
- ext install Ionide-fsharp
+ ```text
+ ext install Ionide-fsharp
+ ```
You can also install the plugin from the plugin pane on the left-hand side.
diff --git a/use/mac/index.md b/use/mac/index.md
index c7383260..d30a7076 100644
--- a/use/mac/index.md
+++ b/use/mac/index.md
@@ -27,7 +27,9 @@ dotnet fsi hello.fsx
If this is your first time using .NET Core, there will be a short, one-time message about using the .NET SDK. After that, you'll see the following output in your console:
- Hello World from F#
+```text
+Hello World from F#
+```
To create a project use
@@ -53,13 +55,15 @@ For more information see [Getting started with the F# command line tools](https:
supporting [a lot of languages](https://code.visualstudio.com/docs/languages/overview).
F# is supported by the [Ionide](http://ionide.io/) project.
-1. Install [.NET Core SDK](https://dotnet.microsoft.com/download) like in step 1.
+1. Install [.NET Core SDK](https://dotnet.microsoft.com/download) like in step 1.
-2. Install [Visual Studio Code](https://code.visualstudio.com/download) for macOS.
+2. Install [Visual Studio Code](https://code.visualstudio.com/download) for macOS.
-3. Press `Cmd+Shift+P` and enter the following to install the Ionide package for VS Code.
+3. Press `Cmd+Shift+P` and enter the following to install the Ionide package for VS Code.
- ext install Ionide-fsharp
+ ```text
+ ext install Ionide-fsharp
+ ```
You can also install the plugin from the plugin pane on the left-hand side.
diff --git a/use/windows/index.md b/use/windows/index.md
index 09860c13..2370e93b 100644
--- a/use/windows/index.md
+++ b/use/windows/index.md
@@ -25,7 +25,9 @@ dotnet fsi hello.fsx
If this is your first time using .NET Core, there will be a short, one-time message about using the .NET SDK. After that, you'll see the following output in your console:
- Hello World from F#
+```text
+Hello World from F#
+```
To create a project use
@@ -50,13 +52,15 @@ For more information see [Getting started with the F# command line tools](https:
supporting [a lot of languages](https://code.visualstudio.com/docs/languages/overview).
F# is supported by the [Ionide](http://ionide.io/) project.
-1. Install [.NET Core SDK](https://dotnet.microsoft.com/download) like in step 1.
+1. Install [.NET Core SDK](https://dotnet.microsoft.com/download) like in step 1.
-2. Install [Visual Studio Code](https://code.visualstudio.com/download) for Windows.
+2. Install [Visual Studio Code](https://code.visualstudio.com/download) for Windows.
-3. Press `Ctrl+Shift+P` and enter the following to install the Ionide package for VS Code.
+3. Press `Ctrl+Shift+P` and enter the following to install the Ionide package for VS Code.
- ext install Ionide-fsharp
+ ```text
+ ext install Ionide-fsharp
+ ```
You can also install the plugin from the plugin pane on the left-hand side.
@@ -69,9 +73,9 @@ Ionide works best if you use the .NET CLI to create your projects. You can learn
On Windows, F# programmers commonly use the Visual Studio tools for F#.
-- [Visual Studio 2019](https://www.visualstudio.com/downloads/) comes with F# support in all its editions: Community, Professional and Enterprise. Community is completely free. See [Get started with F# in Visual Studio](https://docs.microsoft.com/dotnet/fsharp/get-started/get-started-visual-studio) for more information.
+- [Visual Studio 2019](https://www.visualstudio.com/downloads/) comes with F# support in all its editions: Community, Professional and Enterprise. Community is completely free. See [Get started with F# in Visual Studio](https://docs.microsoft.com/dotnet/fsharp/get-started/get-started-visual-studio) for more information.
-- If you already have an older version of Visual Studio, F# is also supported. But the quality of the tooling support and number of features is not as high as in Visual Studio 2019.
+- If you already have an older version of Visual Studio, F# is also supported. But the quality of the tooling support and number of features is not as high as in Visual Studio 2019.