
Hi there, I was reading "Real World Haskell" and found this paper. [1] On the first page of the paper there is an example: inc* (odds_Int [1,2,3]) = [2,4] /= [4] = odds_Int (inc* [1,2,3]) I tried to implement it in Haskell: (I'm a newbie. I guess it's possible to write a better version.) module Param where import Prelude odds :: [Int] -> [Int] odds [] = [] odds [x] = if odd x then [x] else [] odds (x:xs) = if odds [x] == [] then odds xs else [x] ++ odds xs inc :: [Int] -> [Int] inc [] = error "Empty list" inc [x] = [succ x] inc (x:xs) = inc [x] ++ inc xs Looks fine: *Param> odds [1,2,3] [1,3] *Param> inc [1,2,3] [2,3,4] But my results differ from the paper's: *Param> inc (odds [1,2,3]) [2,4] *Param> odds (inc [1,2,3]) [3] I doubt that there is an error in the paper. So it seems that something is wrong with my code. But I can't find the error. Could you help me? (Or there is no error at all and I misunderstood something.) [1] http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf Thanks