I tried to minimize the number of errors in the book as hard as I could. However, some errors are (unfortunately!) inevitable. This page contains the list of known issues. If you spot an issue that isn’t listed on this page, please let me know either using the book forum or send me an email to tomas@tomasp.net.
Chapter 3
- Page 65, first paragraph There is a typo in the following sentence: “Rather than
adding the method to theType<T1, T2>class from listing 3.7, we implement it as an extension method.” The name of the class isn’tType<T1, T2>, but should instead beTuple<T1, T2>. - Page 68, Section 3.3, second paragraph There is a confusing grammar error. The sentence “The type that represents functional lists is either an empty or is composed …” should be “The type that represents functional lists is either an empty list or is composed …”.
- Page 78, Listing 3.18 The pattern
hd::tailshould instead behead::tail, because the code uses theheadname later on:match list with | [] -> init | head::tail -> let resultRest = aggregateList op init tail op resultRest head
Chapter 4
- Page 83, Listing 4.2 On the third line of the listing I use a function
List.ofseq,
which is a wrong name. The correct name of the function isList.ofSeq(with uppercase “S”). The line should look like this:let cells = List.ofSeq(csvLines.Split(',')) - Page 101, Listing 4.11 When calling
MeasureString, we give itlbl
value as the first argument, but this value isn’t declared anywhere. It should be thetitleparameter instead:let size = gr.MeasureString(title, fnt)
Chapter 5
- Page 105 (introduction for Part 2): There is a repeated sentence: “In part 2 we’ll review all the basic functional features that make it possible to write the first version of the program.”
- There is an additional word “them” in the last sentence of section 5.4.3. “We’ll talk about generic functions in detail
themlater, but for now…”
Chapter 6
- Page 155 The last line of the second inline code example is missing a closing
parenthesis “)”. It is the example that shows how to usemapfunction instead of the
innermatchparameter instead. The line should be:| Some(first) -> readInput() |> Option.map (fun second -> first + second)
- Page 159 In Listing 6.15, in the left column, the second line is
match opt with, but it should bematch input with.
Chapter 9
- Page 241 The last line on the page says “We can break the >NET rules when…”. The correct version should be of course “.NET”.
- Page 248, Listing 9.14 The second line from the end of the listing shows
a wrong F# Interactive output. The listing showsClient: John Doe, q=16, but the
actual output should beClient: John Doe, loan coefficient: 16 - Page 251, second paragraph A sentence in the paragrpah says “At this point, you can choose which style to follow: an imperative one with some mutable types, or a purely functional one where everything is mutable.” The emphasized word should be immutable.
- Page 257, first paragraph A description of the previous listing: “The next step is
to invoke the Deflate method (1)” refers mistakenly to the bullet (1). It should refer to the bullet (2) instead.
Chapter 10
- Page 272, Listing 10.9 In the body of the
mapfunction, the last
line (map' f list []) should be indented one level less (to match with thelet rec
definition). - Page 276, first paragraph below listing 10.12 A description says “… which is similar to
List.intthat we discussed in listing 10.2.” TheList.intshould beList.init.
Chapter 11
- Page 311, Listing 11.22 The text below the listing says “To specify what should be displayed, we set the
DataMemberproperty to the name…”. The name of the property should beDisplayMember(the listing itself is correct).
Chapter 12
- Page 323, last paragraph There is an additional “is” word in the sentence: “We do this is because the sequence of random colors….. “
Chapter 13
- Page 369, second paragraph from the end In the sentence “In this section, we’ve seen how to get a list of regions that we want to further study.” the last two words should be switched, so that it reads better.
- Page 380, Listing 13.9 The last two lines of the listing use incorrect names of values (declared earlier). The names should be
namesanddataArrayinstead of
namesVertandtableArr. The correct version is:worksheet.Range("B3", "B" + endColumn).Value2
Chapter 14
- Page 387, Listing 14.3 There is a mismatch in the C# and F# version of the code that is compared in the listing. The F# version counts primes from 1,000,000 to 3,000,000, while the C# version only between 1,000,000 and 2,000,000.
Chapter 16
- Page 477, first paragraph There are redundant words in the first sentence:
“All we have to do is to add the following single line before the line that last line that runs the recursion”. The redundant bit should be deleted.

