|
| 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