I had mistakenly learned that curry was a form of generalized partial application from the paper : Function Currying in Scheme by Jeffrey A. Meunier In my paper I defined curry in Cat as: define curry : ('b ('A 'b -> 'C) -> ('A -> 'C)) { swap quote swap compose } Whereas this really should have been called "partial-apply", "papply" or something comparable. So the correct definition should have been: define papply : ('b ('A 'b -> 'C) -> ('A -> 'C)) { swap quote swap compose } define curry : (('A 'b -> 'C) -> ('b -> ('A -> 'C)) { quote [papply] compose }