{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:53:58Z","timestamp":1776891238566,"version":"3.51.2"},"reference-count":17,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"2","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":4969,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1995,4]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>We study the type inference problem for a system with type classes as in the functional programming language Haskell. Type classes are an extension of ML-style polymorphism with overloading. We generalize Milner's work on polymorphism by introducing a separate context constraining the type variables in a typing judgement. This leads to simple type inference systems and algorithms which closely resemble those for ML. In particular, we present a new unification algorithm which is an extension of syntactic unification with constraint solving. The existence of principal types follows from an analysis of this unification algorithm.<\/jats:p>","DOI":"10.1017\/s0956796800001325","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:12:15Z","timestamp":1226056335000},"page":"201-224","source":"Crossref","is-referenced-by-count":24,"title":["Type Reconstruction for Type Classes"],"prefix":"10.46298","volume":"5","author":[{"given":"Tobias","family":"Nipkow","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Christian","family":"Prehofer","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"25203","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800001325_ref015","first-page":"227","volume-title":"Proc. SIGPLAN '93 Symp. Programming Language Design and Implementation","author":"Peterson","year":"1983"},{"key":"S0956796800001325_ref014","first-page":"1","volume-title":"Proc. 5th ACM Conf. Functional Programming Languages and Computer Architecture","author":"Nipkow","year":"1991"},{"key":"S0956796800001325_ref013","first-page":"409","volume-title":"Proc. 20th ACM Symp. Principles of Programming Languages","author":"Nipkow","year":"1993"},{"key":"S0956796800001325_ref017","first-page":"60","volume-title":"Proc. 16th ACM Symp. Principles of Programming Languages","author":"Wadler","year":"1989"},{"key":"S0956796800001325_ref011","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"S0956796800001325_ref001","unstructured":"Blott S. 1992. An approach to overloading with polymorphism. PhD thesis, Dept. of Computing Science, University of Glasgow."},{"key":"S0956796800001325_ref004","first-page":"170","volume-title":"Proc. ACM Conf. on LISP and Functional Programming","author":"Chen","year":"1992"},{"key":"S0956796800001325_ref016","doi-asserted-by":"publisher","DOI":"10.1007\/3540543961_2"},{"key":"S0956796800001325_ref009","first-page":"131","volume-title":"Proc. 2nd European Symposium on Programming","author":"Kaes","year":"1988"},{"key":"S0956796800001325_ref008","first-page":"287","volume-title":"Proc. European Symposium on Programming","author":"Jones","year":"1992"},{"key":"S0956796800001325_ref003","first-page":"13","volume-title":"Proc. ACM Conf. Lisp and Functional Programming","author":"Cl\u00e9ment","year":"1986"},{"key":"S0956796800001325_ref002","first-page":"136","volume-title":"Proc. 1980 LISP Conference","author":"Burstall","year":"1980"},{"key":"S0956796800001325_ref005","first-page":"207","volume-title":"Proc. 9th ACM Symp. Principles of Programming Languages","author":"Damas","year":"1982"},{"key":"S0956796800001325_ref006","doi-asserted-by":"publisher","DOI":"10.1145\/130697.130699"},{"key":"S0956796800001325_ref007","unstructured":"Jones M. P. 07 1992. Qualified types: Theory and practice. D.Phil. Thesis, Programming Research Group, Oxford University Computing Laboratory."},{"key":"S0956796800001325_ref010","first-page":"193","volume-title":"Proc. ACM Conf. LISP and Functional Programming","author":"Kaes","year":"1992"},{"key":"S0956796800001325_ref012","volume-title":"The Definition of Standard ML.","author":"Milner","year":"1990"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800001325","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:18:05Z","timestamp":1776889085000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800001325\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1995,4]]},"references-count":17,"journal-issue":{"issue":"2","published-print":{"date-parts":[[1995,4]]}},"alternative-id":["S0956796800001325"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800001325","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1995,4]]}}}