(* Carsten Schuermann *) (* Observers in ML *) let fun apply f x k = k (f x) val observer = fn n => fn x => (print ("Observer " ^ Int.toString n ^ ": observed " ^ Int.toString x ^ "\n") ; x) val observers = observer 1 o observer 2 o observer 3 o observer 4 val tester = fn x => apply (fn y => y + 1) x observers in (apply (fn y => y + 1) 10 observers) end