To the third printing of "OCaml from the Very Beginning", 2014

Page 85, for "dependant" read "dependent"

Page 86, Question 3. The naive solution in fact has a general enough type, so the question is misleading. The answer to this question gives the wrong type for the first version.

Page 89, for "no longer depends" read "may no longer depend"

 

To the second printing of "OCaml from the Very Beginning", October 2013:

Page 78, for "widest" read "narrowest"

Page 102, for "file_statistics_channel channel" read "channel_statistics channel"

Page 142, for "rev_inner (h :: a) l" read "rev_inner (h :: a) t"

Page 154-155, the truncate function should call truncate_l in both solutions.

 

To the first printing of "OCaml from the Very Beginning", June 2013: 

Page 12, for "gcd 64000 3546" read "gcd 64000 3456"

Page 26, insert parentheses to clarify evaluation order: 

1 + (1 + length [5; 5]) , 1 + (1 + (1 + length [])), 1 + (1 + (1 + 0)), and 1 + (1 + (1 + ...

Page 30, for "h::t -> h :: take (n - 1) l" read "h::t -> h :: take (n - 1) t" 

Page 39, for "by found by" read "be found by" 

Page 68, for "map (map f))" read "map (map f)"

Page 82, replace '=' with '->' in the match cases for size, total, and max_depth

Page 124, for "int * int * int = (0, 0, 0, 0)" read "int * int * int * int = (0, 0, 0, 0)" 

Page 137, for "match 1 + 1 with =" read "match 1 + 1 with" 

Page 139, in "count_true" for "[] -> []" read "[] -> 0"

Page 173, for "0.22s" read "0.022s" 

 

Thanks to all those who took the time to point these out.