Why are you putting those type signatures everywhere ? Won't your code compile without them ? It seems to me that absent a strange Change type, all those things can be inferred... Are you doing this as an exercise or because you think it is more readable ?

--
Jedaï