To the second printing, 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, 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.