small medium large xlarge

The latest version of the book is P1.0, released 7 months ago. If you've bought a PDF of the book and would like to update it to this version (for free), visit your home page.

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:

If you've found a new error, please submit it.

  • Typo
  • Tech. error
  • Suggestion
  • Maybe next edition
  • Not a problem
  • Reported in: B3.0 (02-May-18)
#83057
PDF page: iv

On page iv, line 3 of text, "I just completed by second year ..." should read "I just completed my second year ..."--Denise Case

  • Reported in: B2.0 (22-Apr-18)
#83033
PDF page: 21
I think “At your very core, you believe that 99 will always have the value 99.” should be “At your very core, you believe that count will always have...more...
  • Reported in: B2.0 (16-Apr-18)
#83010
PDF page: 37

"However, Elixir thinks that this is a risk way to write code."

"risk" should be changed to "risky."--Gareth Nicholson

  • Reported in: B2.0 (29-Apr-18)
#83051
PDF page: 37

"However, Elixir thinks that this is a risk way to write code." I think "risk" should be changed to "risky"--Charles A Zahn

  • Reported in: P1.0 (02-Jun-18)
#83212
PDF page: 38
in the ode listing the underscoreefore lp is missing IS:" Regex.run(~r/^lp:" SHOULD: "Regex.run(~r/^_lp:" fortunately it is correct in the following...more...
  • Reported in: P1.0 (03-Aug-18)
#83445
Paper page: 78
There is an error in the solution for the exercise at the top of the page. The exercise says to define caesar(list, n), which wraps if the character ...more...
  • Reported in: P1.0 (03-Aug-18)
#83446
Paper page: 78
My caesar(list, n) solution: def caesar([], _n), do: [] def caesar([head|tail], n) do [ rem(head+n-?a, 26) + ?a | caesar(tail, n) ] e...more...
  • Reported in: P1.0 (09-Sep-18)
#83636
PDF page: 81
The exercise description is vague enough that I was unable to understand what it was asking me to do; consider rewording this exercise to make it clea...more...
  • Reported in: P1.0 (07-Jul-18)
#83341
PDF page: 89
In describing the 'swap' function immediately above the 'List of Lists' section: Text says "Given that we take two values off the list on each cycl...more...
  • Reported in: P1.0 (03-Aug-18)
#83449
PDF page: 89
Steven McClain's errata report is erroneous. The sentence he reported explains the previous sentence: This will happen [i.e. the third definition ...more...
  • Reported in: P1.0 (05-Jul-18)
#83326
PDF page: 92
In the example 'maps/dynamic_nested.exs', the value nested.westley.actor.last ("Elwes") is called a typo by a comment. However, the example that repla...more...
  • Reported in: P1.0 (07-Jul-18)
#83342
PDF page: 92
" In the original body of for_location..." Missing 'do' statement on line 1 of this code: def for_location([ [ time, target_loc, temp, rain ] |...more...
  • Reported in: P1.0 (04-Aug-18)
#83450
Paper page: 92
Either get rid of the author example where you pass a function to get_in(), or explain what's going on. For instance, Elixir calls the function with ...more...
  • Reported in: P1.0 (05-Aug-18)
#83459
Paper page: 95

There are no exercises in Chapter 8. How come? Please add some exercises. --7stud

  • Reported in: P1.0 (05-Aug-18)
#83460
Paper page: 102
Exercise: ListsAndRecursion-5 The instructions say. "Implement the following Enum functions using *no library functions*....", yet the solution fo...more...
  • Reported in: P1.0 (07-Aug-18)
#83471
Paper page: 114
In the section titled "Your Turn", the Exercise: ListsAndRecursion-7 says: --- In your last exercise of Chapter 7, Lists and Recursion, on page 71...more...
  • Reported in: P1.0 (07-Aug-18)
#83472
Paper page: 114
In the section titled "Your Turn" the Exercise:ListsAndRecursion-7 says to use a comprehension to find all the prime numbers between 2 and n. Howeve...more...
  • Reported in: P1.0 (13-Aug-18)
#83491
Paper page: 137
In the last two code examples on this page, the code does this: dave = %{....} case dave do %{state: some_state} = person -> IO.puts "#{per...more...
  • Reported in: P1.0 (13-Aug-18)
#83497
PDF page: 152
> In this case, we give the version as "~> 1.0.0". This matches any version of HTTPoison with a major version of 1 and a minor version of 0 or greater...more...
  • Reported in: P1.0 (13-Aug-18)
#83489
Paper page: 156
In the first paragraph of text up from the bottom of the page, the book says, --- We also have to deal with the possible error response from the f...more...
  • Reported in: P1.0 (16-Aug-18)
#83516
Paper page: 156
In my earlier errata for this page, I stated: --- Second, the error response is not from the fetch(). HTTPoison does not return a response tuple t...more...
  • Reported in: B2.0 (14-Apr-18)
#83005
PDF page: 156
In some parts it says to use "mix deps.get" to install the dependencies, after adding in "mix.exs". However, it will only be possible to use "mix deps...more...
  • Reported in: P1.0 (08-Aug-18)
#83475
PDF page: 160
When following "Transformation: Take First n Items" , page 160, calling last(count) method fails in compilation: mix test Compiling 2 files (.ex) ...more...
  • Reported in: P1.0 (14-Aug-18)
#83498
Paper page: 160
The second def from the top of the page is the definition of the function last(), which by the way is the worst name for that function that I can thin...more...
  • Reported in: P1.0 (17-Aug-18)
#83518
Paper page: 160
At the bottom of the page there is some code: ---- def print_table_for_columns(rows, headers) do with a=... b=... c= ... do ...more...
  • Reported in: P1.0 (17-Aug-18)
#83523
Paper page: 160
Here's what I would consider a much simpler version of the Issues.TableFormatter module. My interface allows the user to specify both the header and ...more...
  • Reported in: P1.0 (30-May-18)
#83193
PDF page: 160
Following the words "we discover the built-in Enum.take:" there's a code excerpt. 1. There's an arrow on the new "|> last(count)" line, but there sho...more...
  • Reported in: P1.0 (16-Aug-18)
#83508
Paper page: 161
I guess beginners to Elixir are expected to know the Erlang format sequences. For anyone who doesn't know Erlang, there is something that looks lik...more...
  • Reported in: P1.0 (17-Aug-18)
#83519
Paper page: 161
At the bottom of the page is a code listing with this line: import ExUnit.CaptureIO #And allow us to capture stuff sent to stdout The comment is...more...
  • Reported in: P1.0 (09-Aug-18)
#83482
PDF page: 164
Run app locally fails to have the results formatted. Instead, when running "./issues pragdave earmark 4" I'm getting the following error and results: ...more...
  • Reported in: B2.0 (12-Apr-18)
#82989
PDF page: 167
In the screenshot of the TableFormatter documentation you're showing elements which are not added until page 175. Maybe you could add a note saying so...more...
  • Reported in: B2.0 (12-Apr-18)
#82990
PDF page: 167
This is a really minor one but the output from invoking 'mix docs' is different for me (using Elixir 1.6.4, ex_doc 0.18.3 and earmark 1.2.5). I get...more...
  • Reported in: P1.0 (24-Sep-18)
#83703
Paper page: 168
The exercise at the bottom of p. 168 instructs us to parse the hourly weather data from (omitted link here), but the xml contains only one observation...more...
  • Reported in: P1.0 (01-Sep-18)
#83599
Paper page: 171
The command pry> continue() ...ends up freezing iex. According to the docs: -- To exit a breakpoint, the developer can either invoke conti...more...
  • Reported in: P1.0 (09-Jul-18)
#83351
PDF page: 171

There is a line that reads `iex> continue()` and it should read `pry> continue()`--Brandon Zimmerman

  • Reported in: P1.0 (09-Jul-18)
#83352
PDF page: 174
The syntax highlighting is all off. Whatever program produced the syntax formatting for code in the PDF must not realize that the code is a continuati...more...
  • Reported in: P1.0 (24-May-18)
#83135
PDF page: 178
In this discussion of using the setup block in ExUnit, it seems odd that you could return a keyword list from the setup block and then access it using...more...
  • Reported in: B2.0 (12-Apr-18)
#82992
PDF page: 181
In the section at the bottom of the page where you break the test you change it to ' check all number <- real do'. This should be 'check all number <...more...
  • Reported in: P1.0 (01-Sep-18)
#83601
Paper page: 181
After the code example at the top of the page, the second sentence says: --- We have to include use ExCheck at the top to include the property tes...more...
  • Reported in: P1.0 (09-Jul-18)
#83353
PDF page: 182
"The two new tests use a different generator: list(int) generates a number of lists, each containing zero or more ints." list(int) should be list_of(i...more...
  • Reported in: B2.0 (12-Apr-18)
#82995
PDF page: 184
The testing code in Structuring Tests (starting on page 177) is done in the pbt project rather than the issues project. It wasn't too jarring at the s...more...
  • Reported in: B3.0 (09-May-18)
#83082
PDF page: 191
The code before formatted is the same code after formatted in both examples: "no_vowels string" and "@names". I've checked in Beta 2 and it is OK, but...more...
  • Reported in: B3.0 (09-May-18)
#83083
PDF page: 192
The code before formatted is the same code after formatted in the trailing comma example. I've checked in Beta 2 and it is OK, but in the Beta 3 it is...more...
  • Reported in: P1.0 (03-Jul-18)
#83317
PDF page: 199

In send pid, { self, "World!" } slef should be self() to be consistent with the code sample.--Akiyuki TAKOSHIMA

  • Reported in: P1.0 (07-Sep-18)
#83631
Paper page: 203
In my opinion, this is a much clearer Chain example: defmodule Chain do def process(prev_pid) do receive do num -> IO.puts "process ##{num}...more...
  • Reported in: B2.0 (16-Apr-18)
#83013
PDF page: 206

The github issue (1050) referred to in the footnote of this page has now been closed.--Craig Read

  • Reported in: P1.0 (09-Sep-18)
#83638
Paper page: 208
The first line of text after the code example says, --- This time we see an :EXIT message when the spawned process terminates. --- Well, I saw...more...
  • Reported in: B1.0 (22-Feb-18)
#82813
Paper page: 210
Can not open the link Exercise: WorkingWithMultipleProcesses-2 ( forums.pragprog.com/forums/322/topics/11959). The error shows "We're sorry, but some...more...
  • Reported in: B2.0 (10-Apr-18)
#82979
PDF page: 222

In the .mobi format, at the equivalent point to PDF page 222, the stacked vertical windows show up in a very narrow (roughly 1") column.--Jeremy Brown

  • Reported in: P1.0 (01-Dec-18)
#84072
PDF page: 240
This page says "Even though we’ve recompiled the code, the old version is still running. The VM doesn’t hot-swap code until you explicitly access it b...more...
  • Reported in: P1.0 (24-Jun-18)
#83298
PDF page: 257

"Well call it Duper" is missing the apostrophe in "We'll"

  • Reported in: B2.0 (20-Apr-18)
#83026
PDF page: 267
The code for path_finder.ex has the line '@me PathFinder'. Instead it should be '@me __MODULE__'. Otherwise it throws an error when trying to start th...more...
  • Reported in: P1.0 (07-Jun-18)
#83238
PDF page: 270
Paper page: 265
In duper/1/duper/lib/duper/path_finder.ex it says @me PathFinder while in duper/1/duper/lib/duper/results.ex it says @me __MODULE__ Why no...more...
  • Reported in: P1.0 (24-Jun-18)
#83299
PDF page: 281
This section of code seems to be out of date: defmodule Sequence do use Application def start(_type, _args) do Sequence.Supervisor.start_l...more...
  • Reported in: P1.0 (03-Aug-18)
#83443
PDF page: 284
"If you’re following along at home, have a look at rel.config.exs" should be "If you’re following along at home, have a look at rel/config.exs" ...more...
  • Reported in: P1.0 (31-Aug-18)
#83594
PDF page: 289
In the code sample for "otp-app/sequence_v2/lib/sequence/server.ex": def terminate(_reason, current_number) do Sequence.Stash.update(current_num...more...
  • Reported in: P1.0 (16-Jul-18)
#83377
PDF page: 298
In the source code for tasks/anagrams.exs on PDF pages 297-298, the stated goal is to load the 4 word list files in parallel using Task.async/Task.awa...more...
  • Reported in: P1.0 (05-Sep-18)
#83611
PDF page: 326
The code snipet in the explanation for Exercise:LinkingModules-BehavioursAndUse-1, the function name dump_dfn should be dump_defn to be consistent wit...more...
  • Reported in: B2.0 (04-Mar-18)
#82870
PDF page: 356
The text above the mix.exs code says "... our mix.exs gets a little more complicated", but I don't see anything in the code that relates to adding th...more...
  • Reported in: P1.0 (12-Dec-18)
#84137
PDF page: 358

"Exceptions in Elixir are basically records"

Shouldn't it be "Exceptions in Elixir are basically structs"?--Alexis Jeandeau

  • Reported in: B2.0 (25-Mar-18)
#82940
PDF page: 1661
The .mobi version has an issue at location 1564 that is not present in the PDF -- spurious extra lines and colons in the code listing . I can't cut...more...