How is Combinatory Logic relevant to software design?  For example, can one transform programs into CL?  If so, how?  Does CL provide a canonical representation for programs?  
How to represent semantics with Combinatory Logic
semantics