p 9 The comment before the square function should read `To square a number'.
p 78 In the equation on line -9, the comment should read `by (1),(2)'.
p 79 The equation in the middle of the page should be
sumPowers n = power2 (n+1) - 1
p 144 Line -5, replace double by times2.
p 173 Replace double by times2, twice.
p 175 Replace doubleList by double, four times.
p 190 Add to the principle of extensionality `of the appropriate type'.
p 190 Exercise 7.21, replace all occurrences of swap by converse.
p 195 Exercise 7.29, in the equation replace the `&' by `$both' and add the words
where both p q x = p x & q x.
p 205 At the foot of the page in the comment on (1), the roles of [num] and [bool] should be reversed.
p 208 The first paragraph should read: `The expression in each clause on the right-hand side of an equation must unify to some type at least as general as the type declared for the result of the function.'
p 218 The type of showPerson should be people -> string.
p 224 The type of showExpr should be expr -> string.
p 230 The type of bEval should be bExp -> bool.
p 240 There should not be a space between :: and = in definitions of edit.
p 275 The definition of the queue implementation should read
queue * == ([*],[*])
Section 11.7 Note that the join function is implemented in such a way that it only guarantees that its result is a search tree if all elements of the first argument are smaller than all elements of the second.
p 289 The implementation of insert given in the book is incorrect. It should take account of whether the value val is a member of the tree (Node v n t1 t2) when calculating the size of the resulting tree. We therefore need to write
insert val (Node v n t1 t2) = Node v n t1 t2 , if v=val = Node v (1 + size t1 + size nt2) t1 nt2 , if val > v = Node v (1 + size nt1 + size t2) nt1 t2 , if val < v where nt1 = insert val t1 nt2 = insert val t2
p 321 The type of routes should be
relation * -> * -> * -> [[*]]
p 323 The type of routesC should be
relation * -> * -> * -> [*] -> [[*]]
p 328 The displayed block in the middle of the page should begin with the line
(digList $do digsToNum) "21a3"
p 331 Exercise 12.12. The type of the function charlistToExpr should be
with the examples beingcharlistToExpr :: [char] -> expr
and so on.charlistToExpr "234" = Lit 234
p 347 The local definition should read
waitTime (Discharge t w s) = w
p 371 Exercise 13.28, In the second equation replace & by $both. Add after the equations the line `where both is defined in Exercise 7.29.'.
p 382 The second clause on the right hand side of the definition of mSort1 in exercise 14.14 should be followed by , otherwise.
p 397 Exercise 14.24, the first word should be `Give'.
p 418 The three equations at the foot of the page should be labelled (4), (5), (6).
p 425 On the first line, `being' should be `begin'.