Prof. Ullman, I'd like to report a possible error in p.167, Exercise 5.4.6(c) of "Elements of ML Programming, 2nd Edition". Either suggested solution in your page or my own version of solution seems to cause type errors. First, the suggested solution in http://www-db.stanford.edu/~ullman/emlpsols/sol5.html fails with a type error: Standard ML of New Jersey, Version 110.0.7, September 28, 2000 [CM&CMB] (...) - reduce(op ^, [#"f",#"o",#"o"]); stdIn:30.1-30.31 Error: operator and operand don't agree [tycon mismatch] operator domain: (string * string -> string) * string list operand: (string * string -> string) * char list in expression: reduce (^,#"f" :: #"o" :: :: ) And a solution I came up with does not seem to work either: - reduce(fn(a,b) => str(a)^str(b), [#"f",#"o",#"o"]); stdIn:32.1-32.51 Error: operator and operand don't agree [tycon mismatch] operator domain: (char * char -> char) * char list operand: (char * char -> string) * char list in expression: reduce ((fn (,) => ^ ),#"f" :: #"o" :: :: ) After giving a fair amount of try, I came to the conclusion that there is no easy solution for this type mismatch problem (at least, as long as we are using reduce only). I'd be grateful if you could check this for yourself. best regards, -- Hideo Fukumori fukumori at computer.org