We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

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

Key: Typo Tech. Error Suggestion Not a problem Next edition

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

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
3
#77233: 4th paragraph reads: "But no one would write pmap like this—you’re coding at the lowest level. Instead, you’d likely use Elixir’s build-in ...more...
B15.0
21-Aug-14
37
#77209: The third exercise in Exercise: Functions-1 - pair_tuple_to_list.( { 8, 7 } ) #=> [ 8, 7 ] Example should use different numbers, 8 and 7...more...
B15.0
13-Aug-14
43
#77120: The octal number should be 0o756 in sentence "Integer literals can be written as decimal (1234), hexadecimal (0xcafe), octal (0765), and binar...more...
B15.0
03-Aug-14
46
#77221: “This means that new software needs to use as many cores as it can if it is to maximum its use of the machine.” Excerpt From: Dave Thomas. ...more...
B15.0
17-Aug-14
55

#77119: val |> f(a,b) is basically the same as calling f(val,a,b) , and

should be f(val(a,b))

--Anton Mishchuk

B15.0
03-Aug-14
78
#77140: In the extra box "How Lists Are Displayed by iex", I believe this is actually an issue with how Erlang interprets lists/strings. Elixir has th...more...
B14.0.14.0
04-Aug-14
82

#77237: "And updates follow suite:" should be "And updates follow suit:"--Brenton Annan

B15.0
22-Aug-14
85

#77232: Last sentence of "Nested Dictionary Structures" section is a fragment:

"However, there’s one cool trick that both these functions support: rathe"--Dan Kee

B15.0
21-Aug-14
95
#77169: The output of the section "A Stream is a Composable Enumerator" at the end of the page reads "Stream.Lazy" yet it's this on my computer: "#...more...
B15.0
06-Aug-14
100

#77236: s/funtion/function/

B15.0
22-Aug-14
104

#77229: uses an comprehension--Steve Downey

B15.0
20-Aug-14
104

#77230: should mix_maxes be min_maxes?--Steve Downey

B15.0
20-Aug-14
105
#77139: You use a comma inside a ~w sigil, which seems strange. Although the resulting output is correct, I think it would be more intuitive to write ...more...
B15.0
04-Aug-14
106

#77138: ‘funtion’ should be replaced with ‘function’--Patrick Oscity

B15.0
04-Aug-14
112
#76851: In the graphemes section, my results are different from yours: iex(6)> String.graphemes "Ā`stute" ["Ā", "`", "s", "t", "u", "t", "e"] I tri...more...
Dave Thomas says: This is a problem with the font used to render the example—it cannot represent the character "Ā̀" I'll work out a fix nearer production time.
B13.3.13.3
10-Jun-14
144

#77121: Top of page.

The version of httpoison in the example is "0.3", however in the text it is "3.0".

B15.0
03-Aug-14
144
#77127: You say: "In this case, we give the version as "~> 3.0"." When in fact the example above (correctly) shows the version as '~> 0.3'. A...more...
B15.0
03-Aug-14
144

#77172: This shows that the HTTPoison library is installed, but tht it hasn’t yet been.

Missing 'a' in 'tht'--Derek Campbell

B15.0
07-Aug-14
148
#77195: on the "project/3/issues/lib/issues/github_issues.ex" only :jsx.decode(body) is added, and not for handling non-200 status codes (for errors) ...more...
B15.0
09-Aug-14
148
#77198: On Transformation: Convert Response we decode the json response on handle response with :jsx.decode(body) but only when the pattern is %{statu...more...
B15.0
10-Aug-14
157

#77125: First sentence, "determine at compile timethe minimum level of logging".

Need space between 'time' and 'the'.

--Glenn Rempe

B15.0
03-Aug-14
157
#77126: In the new text about Logger. You reference the Logger module consistently except in the examples in the middle of the page where you say: ...more...
B15.0
03-Aug-14
157

#77193: Should there be a mention to "require Logger" in code example of github_issues.ex?--Eito Katagiri

B15.0
09-Aug-14
157
#77196: Related to comment about p.148 by Jamiel Almeida, "handle_response(%{status_code: status, body: body})" should decode "body" like "{ :error, ...more...
B15.0
09-Aug-14
177
#77216: At the end of the spawn/link1.exs file there's the statement "Link1.run". However, the command that is used to run the file has "-e Link1.run"...more...
B15.0
15-Aug-14
178

#77202: At the bottom of page 178, to execute `spawn/link3.exs`, the command should be:

```
$ elixir -r link3.exs -e Link3.run
```--Eito Katagiri

B15.0
11-Aug-14
178
#77227: "Process.flag(:trap_exit, true)" isn't mentioned in spawn/link1.exs, its removal isn't highlighted in spawn/link2.exs, then it reappears in sp...more...
B15.0
18-Aug-14
178
#77228: Amending my previous suggestion (because editing an errata isn't possible), I think "Process.flag(:trap_exit, true)" just wasn't supposed to b...more...
B15.0
18-Aug-14
184
#77122: The fib.exs example on the bottom of page 184 has to_process = [ 37, 37, 37, 37, 37, 37 ] The text on the top of page 185 says The ...more...
B15.0
03-Aug-14
186

#77145: As you know, *** Exlir *** modules are basically buckets of functions—they cannot
hold state.--Amit Mor

B15.0
06-Aug-14
195

#77166: "inside the Tick.register function, it locates the node contai..."

Module name is Ticker, and therefore the call should be Ticker.register--Amit Mor

B15.0
06-Aug-14
195

#77167: "Let’s run it. We’ll start up our two nodes. We’ll call Tickgrer.start on node one."--Amit Mor

B15.0
06-Aug-14
195

#77173: Tickgrer.start instead of Ticker.start

B15.0
08-Aug-14
197
#77171: "Note that we’ve registered the pid, we can access it from the other node." shouldn't it be phrased "Note that **once** we've registered th...more...
B15.0
07-Aug-14
215

#77203: "No our supervisor process calls the start_link function".
Should be "Now ..."--Amit Mor

B15.0
11-Aug-14
223
#77194: HTTPotion is referred to in the OTP:Applications fourth chapter and probably other places in the book, these are remnants of before the change...more...
B15.0
09-Aug-14
227
#77205: (using Elixir 15.1) It seems that: Sequence.Supervisor.start_link(Application.get_env(:sequence, :initial_number)) doesn't work, when using...more...
B15.0
12-Aug-14
232
#77206: iex output upon recompile is different a bit from what the text reports. Effectively the output is: iex(5)> c("lib/updated_server.ex") lib/u...more...
B15.0
12-Aug-14
232
#77207: I'm using Erlang/OTP 17 with Elixir 0.15.1 calling :sys.resume :sequence results in ** (exit) exited in: :sys.suspend(:sequence) ** (EXIT...more...
B15.0
12-Aug-14
236

#77168: "This is pretty mush the same as specifying any other worker"

Mush! Mush!--Steve Freitas

B15.0
06-Aug-14
236

#77211: "This is pretty ***mush*** the same as specifying any other worker:"--Amit Mor

B15.0
13-Aug-14
241

#77219: All be need to do

B15.0
16-Aug-14
241

#77220: Explain what happens under the hood. Which node stores the state? What are performance implications?

B15.0
16-Aug-14
246
#77222: myif Or my_if ? "When we call the myif function, Elixir has to evaluate all of its parameters before passing them in. So both the do: and ...more...
B15.0
17-Aug-14
253

#77223: "The myif macro receives a condition and a keyword list"

Few lines above (p. 252):
"defmacro if(condition, clauses) do"--Amit Mor

B15.0
17-Aug-14
263

#77224: The list of Available Types needs to include Map.
(Going by the list given in elixir-lang.org/getting_started/16.html )
--Justin Forder

B15.0
18-Aug-14
281

#77225: Under "Writing Your Own Sigils", third para: "...Elixir converts in into.." should be "...Elixir converts it into...".
--Justin Forder

B15.0
18-Aug-14
289
#76692: In the listing for client.ex (near top of page), the function other_function contains the line: "Simple.count_atoms [:a, :b, :c]", but this li...more...
B12.0.12.3
18-Apr-14
295
#77210: To define own exception, ``` defmodule KinectProtocolError do defexception [message: "Kinnect protocol error", can_retry: false] def...more...
B15.0
13-Aug-14
303
#77073: Both examples are the same, showing the correct version. The first one should have Simple.count_atoms [1, 2, 3] instead it has the correct at...more...
B14.3a
29-Jul-14
308

#77226: Bibliography - in the reference to Joe's book, "Second, 2013" should be "Second Edition, 2013".
--Justin Forder

B15.0
18-Aug-14