{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:56:00Z","timestamp":1776891360497,"version":"3.51.2"},"reference-count":49,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"2","license":[{"start":{"date-parts":[[2008,3,1]],"date-time":"2008-03-01T00:00:00Z","timestamp":1204329600000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2008,3]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>The HM(X) system is a generalization of the Hindley\/Milner system parameterized in the constraint domain X. Type inference is performed by generating constraints out of the program text, which are then solved by the domain-specific constraint solver X. The solver has to be invoked at the latest when type inference reaches a let node so that we can build a polymorphic type. A typical example of such an inference approach is Milner's algorithm W. We formalize an inference approach where the HM(X) type inference problem is first mapped to a CLP(X) program. The actual type inference is achieved by executing the CLP(X) program. Such an inference approach supports the uniform construction of type inference algorithms and has important practical consequences when it comes to reporting type errors. The CLP(X) style inference system, where X is defined by Constraint Handling Rules, is implemented as part of the Chameleon system.<\/jats:p>","DOI":"10.1017\/s0956796807006569","type":"journal-article","created":{"date-parts":[[2007,9,13]],"date-time":"2007-09-13T05:16:33Z","timestamp":1189660593000},"page":"251-283","source":"Crossref","is-referenced-by-count":13,"title":["HM(X) type inference is CLP(X) solving"],"prefix":"10.46298","volume":"18","author":[{"given":"MARTIN","family":"SULZMANN","sequence":"first","affiliation":[]},{"given":"PETER J.","family":"STUCKEY","sequence":"additional","affiliation":[]}],"member":"25203","published-online":{"date-parts":[[2008,3,1]]},"reference":[{"key":"S0956796807006569_manual_ref-38","unstructured":"Stuckey, P. J. , Sulzmann, M. & Wazny, J. (2003a) The Chameleon type debugger. In Proc. of Fifth International Workshop on Automated Debugging (AADEBUG 2003). Computer Research Repository. Available at: http:\/\/www.acm.org\/corr\/."},{"key":"S0956796807006569_manual_ref-41","doi-asserted-by":"publisher","DOI":"10.1007\/11924661_1"},{"key":"S0956796807006569_manual_ref-11","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(90)90144-7"},{"key":"S0956796807006569_manual_ref-35","volume-title":"Theoretical Aspects of Object-Oriented Programming. Types, Semantics and Language Design","author":"R\u00e9my","year":"1993"},{"key":"S0956796807006569_manual_ref-5","doi-asserted-by":"publisher","DOI":"10.1145\/582153.582176"},{"key":"S0956796807006569_manual_ref-42","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-44716-4_16"},{"key":"S0956796807006569_manual_ref-17","doi-asserted-by":"publisher","DOI":"10.1016\/S0743-1066(98)10002-X"},{"key":"S0956796807006569_manual_ref-36","doi-asserted-by":"publisher","DOI":"10.1145\/321250.321253"},{"key":"S0956796807006569_manual_ref-37","doi-asserted-by":"publisher","DOI":"10.1145\/1108970.1108974"},{"key":"S0956796807006569_manual_ref-23","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.1988.5132"},{"key":"S0956796807006569_manual_ref-26","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511804175"},{"key":"S0956796807006569_manual_ref-15","unstructured":"Henkin, L. , Monk, J. D. & Tarski, A. (1971) Cylindric Algebra. Amsterdam: North-Holland Publishing Company."},{"key":"S0956796807006569_manual_ref-8","doi-asserted-by":"publisher","DOI":"10.1007\/BF03037279"},{"key":"S0956796807006569_manual_ref-20","first-page":"202","volume-title":"Proc. of ISLP'91","author":"Lakshman","year":"1991"},{"key":"S0956796807006569_manual_ref-40","doi-asserted-by":"publisher","DOI":"10.1145\/1017472.1017486"},{"key":"S0956796807006569_manual_ref-46","unstructured":"Sulzmann, M. & Wazny, J. (2007) Chameleon. Available at http:\/\/www.comp.nus.edu.sg~sulzmann\/chameleon. Accessed August 2007."},{"key":"S0956796807006569_manual_ref-9","first-page":"177","volume-title":"CP'98: Proceedings of the 4th International Conference on Principles and Practice of Constraint Programming","author":"Fordan","year":"1998"},{"key":"S0956796807006569_manual_ref-18","first-page":"444","volume-title":"Computational logic-Essays in Honor of Alan Robinson","author":"Kanellakis","year":"1991"},{"key":"S0956796807006569_manual_ref-3","doi-asserted-by":"publisher","DOI":"10.1016\/S0304-3975(00)00025-6"},{"key":"S0956796807006569_manual_ref-4","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45619-8_42"},{"key":"S0956796807006569_manual_ref-1","first-page":"320","volume-title":"Seventh IEEE Symposium on Logic in Computer Science, Santa Cruz, CA","author":"Aiken","year":"1992"},{"key":"S0956796807006569_manual_ref-14","doi-asserted-by":"publisher","DOI":"10.1145\/169701.169692"},{"key":"S0956796807006569_manual_ref-21","doi-asserted-by":"publisher","DOI":"10.1145\/291891.291892"},{"key":"S0956796807006569_manual_ref-25","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"S0956796807006569_manual_ref-16","doi-asserted-by":"publisher","DOI":"10.1145\/41625.41635"},{"key":"S0956796807006569_manual_ref-29","volume-title":"Fifth International Conference and Symposium on Logic Programming","author":"Nadathur","year":"1988"},{"key":"S0956796807006569_manual_ref-30","doi-asserted-by":"publisher","DOI":"10.1002\/(SICI)1096-9942(199901\/03)5:1<35::AID-TAPO4>3.0.CO;2-4"},{"key":"S0956796807006569_manual_ref-32","volume-title":"Haskell 98 Language and Libraries: The Revised Report","author":"Peyton","year":"2003"},{"key":"S0956796807006569_manual_ref-6","first-page":"217","volume-title":"Proc. of the 22nd Australian Computer Science Conference","author":"Demoen","year":"1999"},{"key":"S0956796807006569_manual_ref-19","unstructured":"Kennedy, A. J. (1996) Type Inference and Equational Theories. Tech. rept. LIX\/RR\/96\/09. LIX, Ecole Polytechnique, 91128 Palaiseau Cedex, France."},{"key":"S0956796807006569_manual_ref-39","doi-asserted-by":"publisher","DOI":"10.1145\/871895.871903"},{"key":"S0956796807006569_manual_ref-43","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-44716-4_16"},{"key":"S0956796807006569_manual_ref-44","unstructured":"Sulzmann, M. , M\u00fcller, M. & Zenger, C. (1999) Hindley\/Milner Style Type Systems in Constraint Form. Research Report ACRC-99-009. University of South Australia, School of Computer and Information Science."},{"key":"S0956796807006569_manual_ref-45","unstructured":"Sulzmann, M. , Odersky, M. & Wehr, M. (1997) Type inference with constrained types. In FOOL4: 4th Int. Workshop on Foundations of Object-Oriented Programming Languages."},{"key":"S0956796807006569_manual_ref-2","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(04)80346-3"},{"key":"S0956796807006569_manual_ref-31","doi-asserted-by":"publisher","DOI":"10.1145\/232706.232715"},{"key":"S0956796807006569_manual_ref-12","unstructured":"Glynn, K. , Stuckey, P. J. & Sulzmann, M. (2000) Type classes and constraint handling rules. In Workshop on Rule-Based Constraint Reasoning and Programming. Available at: http:\/\/xxx.lanl.gov\/abs\/cs.PL\/0006034. Accessed August 2007."},{"key":"S0956796807006569_manual_ref-13","unstructured":"Henglein, F. (1992) Simple Closure Analysis. DIKU Semantics Report D-193. University of Copenhagen."},{"key":"S0956796807006569_manual_ref-7","unstructured":"Dietzen, S. & Pfenning, F. (1991) A declarative alternative to \u201cassert'' in logic programming. In Proc. of ISLP'91, pp. 372\u2013386."},{"key":"S0956796807006569_manual_ref-24","first-page":"436","volume-title":"Proc. of RTA'03","author":"McAllester","year":"2003"},{"key":"S0956796807006569_manual_ref-27","unstructured":"M\u00fcller, M. (1994) A constraint-based recast of ML-polymorphism. In 8th International Workshop on Unification. Also available as Technical Report 94-R-43, Universit\u00e9 de Nancy."},{"key":"S0956796807006569_manual_ref-34","first-page":"389","volume-title":"Advanced Topics in Types and Programming Languages","author":"Pottier","year":"2005"},{"key":"S0956796807006569_manual_ref-48","doi-asserted-by":"publisher","DOI":"10.1145\/75277.75283"},{"key":"S0956796807006569_manual_ref-47","doi-asserted-by":"publisher","DOI":"10.1016\/j.tcs.2004.06.016"},{"key":"S0956796807006569_manual_ref-49","unstructured":"Zenger, C. (1999) Indizierte Typen. Ph.D. thesis, Universit\u00e4t Karlsruhe, Germany."},{"key":"S0956796807006569_manual_ref-28","doi-asserted-by":"publisher","DOI":"10.1016\/0004-3702(84)90017-1"},{"key":"S0956796807006569_manual_ref-22","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0030621"},{"key":"S0956796807006569_manual_ref-10","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-59155-9_6"},{"key":"S0956796807006569_manual_ref-33","doi-asserted-by":"publisher","DOI":"10.1145\/289423.289448"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796807006569","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:19:09Z","timestamp":1776889149000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796807006569\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,3]]},"references-count":49,"journal-issue":{"issue":"2","published-print":{"date-parts":[[2008,7]]}},"alternative-id":["S0956796807006569"],"URL":"https:\/\/doi.org\/10.1017\/s0956796807006569","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2008,3]]}}}