Skip to content

Commit a242ce1

Browse files
committed
.
1 parent a617afc commit a242ce1

File tree

3 files changed

+95
-2
lines changed

3 files changed

+95
-2
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ F# is free and open source, and runs on Linux, Mac, Windows and more. To downloa
1818

1919
## Getting started
2020

21-
Next, before randomly dipping into the posts, you should read the ["why use F#?"](./why-use-fsharp/index.md) page and then the whole "why use F#" series.
22-
After that the "site contents" page provides suggestions for further reading on functions, types and more.
21+
Next, before randomly dipping into the posts, you should read the ["why use F#?"](./why-use-fsharp/index.md) page and then the whole ["why use F#" series](series/why-use-fsharp.md).
22+
After that the ["site contents"](./site-contents/index.md) page provides suggestions for further reading on functions, types and more.
2323

2424
There is a page with some advice on [learning F#](./learning-fsharp/index.md),
2525
and if you have problems trying to get your code to compile, the [troubleshooting F#](./troubleshooting-fsharp/index.md) page might be helpful.

SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
### Getting started
55

6+
* [Contents of the book](site-contents/index.md)
67
* ["Why use F#?" in one page](why-use-fsharp/index.md)
78
* [Installing and using F#](installing-and-using/index.md)
89
* [F# syntax in 60 seconds](posts/fsharp-in-60-seconds.md)

site-contents/index.md

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
---
2+
layout: page
3+
title: "Site Contents"
4+
nav: site-contents
5+
description: "A directory of useful pages"
6+
hasIcons: 1
7+
hasNoCode: 1
8+
---
9+
10+
11+
## Getting started
12+
13+
* [Installing and using F#](../installing-and-using/index.md) will get you started.
14+
* [Why use F#?](../why-use-fsharp/index.md) An interactive tour of F#.
15+
* [Learning F#](../learning-fsharp/index.md) has tips to help you learn more effectively.
16+
* [Troubleshooting F#](../troubleshooting-fsharp/index.md) for when you have problems getting your code to compile.
17+
18+
and then you can try...
19+
20+
* [Twenty six low-risk ways to use F# at work](../posts/low-risk-ways-to-use-fsharp-at-work.md). You can start right now -- no permission needed!
21+
22+
## Tutorials
23+
24+
The following series are tutorials on the key concepts of F#.
25+
26+
* [Thinking functionally](../series/thinking-functionally.md) starts from basics and explains how and why functions work the way they do.
27+
* [Expressions and syntax](../series/expressions-and-syntax.md) covers the common expressions such as pattern matching, and has a post on indentation.
28+
* [Understanding F# types](../series/understanding-fsharp-types.md) explains how to define and use the various types, including tuples, records, unions, and options.
29+
* [Designing with types](../series/designing-with-types.md) explains how to use types as part of the design process, making illegal states unrepresentable.
30+
* [Choosing between collection functions](../posts/list-module-functions.md). If you are coming to F# from C#, the large number of list functions can be overwhelming, so I have written this post to help guide you to the one you want.
31+
* [Property-based testing](../posts/property-based-testing.md): the lazy programmer's guide to writing 1000's of tests.
32+
* [Understanding computation expressions](../series/computation-expressions.md) demystifies them and shows how you can create your own.
33+
34+
## Functional patterns
35+
36+
These posts explain some core patterns in functional programming -- concepts such as "map", "bind", monads and more.
37+
38+
* [Railway Oriented Programming](../posts/recipe-part2.md): A functional approach to error handling
39+
* [State Monad](../series/handling-state.md): An introduction to handling state using the tale of Dr Frankenfunctor and the Monadster.
40+
* [Reader Monad](../posts/elevated-world-6.md): Reinventing the Reader monad.
41+
* [Map, bind, apply, lift, sequence and traverse](../series/map-and-bind-and-apply-oh-my.md): A series describing some of the core functions for dealing with generic data types.
42+
* [Monoids without tears](../posts/monoids-without-tears.md): A mostly mathless discussion of a common functional pattern.
43+
* [Fold and recursive types](../series/recursive-types-and-folds.md): A look at recursive types, catamorphisms, tail recursion, the difference between left and right folds, and more.
44+
* [Understanding Parser Combinators](../posts/understanding-parser-combinators.md): Creating a parser combinator library from scratch.
45+
* [Thirteen ways of looking at a turtle](../posts/13-ways-of-looking-at-a-turtle.md): demonstrates many different techniques for implementing a turtle graphics API, including state monads, agents, interpreters, and more!
46+
47+
## Worked examples
48+
49+
These posts provide detailed worked examples with lots of code!
50+
51+
* [Designing for correctness](../posts/designing-for-correctness.md): How to make illegal states unrepresentable (a shopping cart example).
52+
* [Stack based calculator](../posts/stack-based-calculator.md): Using a simple stack to demonstrate the power of combinators.
53+
* [Parsing commmand lines](../posts/pattern-matching-command-line.md): Using pattern matching in conjunction with custom types.
54+
* [Roman numerals](../posts/roman-numerals.md): Another pattern matching example.
55+
* [Calculator Walkthrough](../posts/calculator-design.md): The type-first approach to designing a Calculator.
56+
* [Enterprise Tic-Tac-Toe](../posts/enterprise-tic-tac-toe.md): A walkthrough of the design decisions in a purely functional implementation
57+
* [Writing a JSON Parser](../posts/understanding-parser-combinators-4.md).
58+
59+
## Specific topics in F# ##
60+
61+
General:
62+
63+
* [Four key concepts](../posts/key-concepts.md) that differentiate F# from a standard imperative language.
64+
* [Understanding F# indentation](../posts/fsharp-syntax.md).
65+
* [The downsides of using methods](../posts/type-extensions.md#downsides-of-methods).
66+
67+
Functions:
68+
69+
* [Currying](../posts/currying.md).
70+
* [Partial Application](../posts/partial-application.md).
71+
72+
Control Flow:
73+
74+
* [Match..with expressions](../posts/match-expression.md) and [creating folds to hide the matching](../posts/match-expression.md#folds).
75+
* [If-then-else and loops](../posts/control-flow-expressions.md).
76+
* [Exceptions](../posts/exceptions.md).
77+
78+
Types:
79+
80+
* [Option Types](../posts/the-option-type.md) especially on why [None is not the same as null](../posts/the-option-type.md#option-is-not-null).
81+
* [Record Types](../posts/records.md).
82+
* [Tuple Types](../posts/tuples.md).
83+
* [Discriminated Unions](../posts/the-option-type.md).
84+
* [Algebraic type sizes and domain modelling](../posts/type-size-and-design.md).
85+
86+
87+
## Controversial posts
88+
89+
* [Is your programming language unreasonable?](../posts/is-your-language-unreasonable.md) or, why predictability is important.
90+
* [Commentary on 'Roman Numerals Kata with Commentary'](../posts/roman-numeral-kata.md). My approach to the Roman Numerals Kata.
91+
* [Ten reasons not to use a statically typed functional programming language](../posts/ten-reasons-not-to-use-a-functional-programming-language.md). A rant against something I don't get.
92+
* [We don't need no stinking UML diagrams](../posts/no-uml-diagrams.md) or, why in many cases, using UML for class diagrams is not necessary.

0 commit comments

Comments
 (0)