Jay. Distinguishing Data Structures and Functions: The Constructor Calculus and Functorial Types. Springer Berlin Heidelberg, 2001, doi:10.1007/3-540-45413-6_19.