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 email@example.com.
- Page 65, first paragraph There is a typo in the following sentence: “Rather than
adding the method to the
Type<T1, T2>class from listing 3.7, we implement it as an extension method.” The name of the class isn’t
Type<T1, T2>, but should instead be
- 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 be
head::tail, because the code uses the
headname later on:
match list with |  -> init | head::tail -> let resultRest = aggregateList op init tail op resultRest head
- Page 83, Listing 4.2 On the third line of the listing I use a function
which is a wrong name. The correct name of the function is
List.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 it
value as the first argument, but this value isn’t declared anywhere. It should be the
let size = gr.MeasureString(title, fnt)
- 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…”
- Page 155 The last line of the second inline code example is missing a closing
parenthesis “)”. It is the example that shows how to use
mapfunction instead of the
matchparameter 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 be
match input with.
- 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 shows
Client: John Doe, q=16, but the
actual output should be
Client: 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.
- Page 272, Listing 10.9 In the body of the
mapfunction, the last
map' f list ) should be indented one level less (to match with the
- Page 276, first paragraph below listing 10.12 A description says “… which is similar to
List.intthat we discussed in listing 10.2.” The
- 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 be
DisplayMember(the listing itself is correct).
- Page 323, last paragraph There is an additional “is” word in the sentence: “We do this is because the sequence of random colors….. “
- 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
tableArr. The correct version is:
worksheet.Range("B3", "B" + endColumn).Value2
- 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.
- 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.