{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:53:54Z","timestamp":1776891234494,"version":"3.51.2"},"reference-count":23,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"1","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":5059,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1995,1]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    This paper describes a flexible type system that combines overloading and higher-order polymorphism in an implicitly typed language using a system of\n                    <jats:italic>constructor classes<\/jats:italic>\n                    \u2014a natural generalization of type classes in Haskell. We present a range of examples to demonstrate the usefulness of such a system. In particular, we show how constructor classes can be used to support the use of monads in a functional language. The underlying type system permits higher-order polymorphism but retains many of the attractive features that have made Hindley\/Milner type systems so popular. In particular, there is an effective algorithm that can be used to calculate principal types without the need for explicit type or kind annotations. A prototype implementation has been developed providing, amongst other things, the first concrete implementation of monad comprehensions known to us at the time of writing.\n                  <\/jats:p>","DOI":"10.1017\/s0956796800001210","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:12:13Z","timestamp":1226056333000},"page":"1-35","source":"Crossref","is-referenced-by-count":46,"title":["A system of constructor classes: overloading and implicit higher-order polymorphism"],"prefix":"10.46298","volume":"5","author":[{"given":"Mark P.","family":"Jones","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"25203","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800001210_ref007","unstructured":"Jones M. P. (1991) Introduction to Gofer\u2014included as part of the Gofer distribution, available by anonymous ftp from nebula.cs.yale.edu in the directory pub\/haskell\/gofer."},{"key":"S0956796800001210_ref013","volume-title":"Categories for the working mathematician. Graduate Texts in Mathematics 5","author":"MacLane","year":"1971"},{"key":"S0956796800001210_ref002","unstructured":"Breazu-Tannen V. , Coquand T. , Gunter C. A. and Scedrov A. (1989) Inheritance and coercion. IEEE Symposium on Logic in Computer Science."},{"key":"S0956796800001210_ref023","doi-asserted-by":"crossref","unstructured":"Wadler P. (1992) The essence of functional programming. 19th Ann. ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Santa Fe, NM.","DOI":"10.1145\/143165.143169"},{"key":"S0956796800001210_ref018","doi-asserted-by":"publisher","DOI":"10.1145\/321250.321253"},{"key":"S0956796800001210_ref009","unstructured":"Jones M. P. (1992b) Qualified types: Theory and Practice. DPhil thesis, Oxford University Computing Laboratory."},{"key":"S0956796800001210_ref005","doi-asserted-by":"publisher","DOI":"10.1145\/130697.130698"},{"key":"S0956796800001210_ref010","volume-title":"Proc. Fifth Annual Glasgow Workshop on Functional Programming","author":"Jones","year":"1992"},{"key":"S0956796800001210_ref006","doi-asserted-by":"publisher","DOI":"10.1145\/130697.130699"},{"key":"S0956796800001210_ref017","volume-title":"IEEE Symposium on Logic in Computer Science","author":"Moggi","year":"1989"},{"key":"S0956796800001210_ref012","volume-title":"Proc. Fifth Annual Glasgow Workshop on Functional Programming","author":"King","year":"1992"},{"key":"S0956796800001210_ref003","doi-asserted-by":"crossref","unstructured":"Chen K. , Hudak P. and Odersky M. (1992) Parametric type classes (Extended abstract). ACM Conf. LISP and Functional Programming, San Francisco, CA, June.","DOI":"10.1145\/141471.141536"},{"key":"S0956796800001210_ref020","doi-asserted-by":"crossref","unstructured":"Steele G. L. Jr (1994) Building interpreters by composing monads. 21st Ann. ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Portland,Oregon.","DOI":"10.1145\/174675.178068"},{"key":"S0956796800001210_ref011","unstructured":"Jones M. P. and Duponcheel L. (1993) Composing Monads. Yale University, Department of Computer Science, Research Report YALEU\/DCS\/RR-1004."},{"key":"S0956796800001210_ref016","volume-title":"The definition of Standard ML","author":"Milner","year":"1990"},{"key":"S0956796800001210_ref014","doi-asserted-by":"crossref","unstructured":"MacQueen D. B. (1984) Modules for Standard ML. Conf. Record 1984 ACM Symposium on Lisp and Functional Programming.","DOI":"10.1145\/800055.802036"},{"key":"S0956796800001210_ref021","doi-asserted-by":"crossref","unstructured":"Wadler P. and Blott S. (1989) How to make ad-hoc polymorphism less ad-hoc. 16th Ann. ACM Symposium on Principles of Programming Languages, Austin, TX.","DOI":"10.1145\/75277.75283"},{"key":"S0956796800001210_ref015","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"S0956796800001210_ref019","doi-asserted-by":"publisher","DOI":"10.1016\/0167-6423(90)90056-J"},{"key":"S0956796800001210_ref001","doi-asserted-by":"crossref","DOI":"10.1017\/S0956796800020025","article-title":"Introduction to generalized type systems","volume":"1","author":"Barendregt","year":"1991","journal-title":"Journal of Functional Programming"},{"key":"S0956796800001210_ref008","volume-title":"European symposium on programming. Lecture Notes in Computer Science 582","author":"Jones","year":"1992"},{"key":"S0956796800001210_ref004","doi-asserted-by":"crossref","unstructured":"Damas L. and Milner R. (1982) Principal type schemes for functional programs. 8th Ann. ACM Symposium on Principles of Programming languages","DOI":"10.1145\/582153.582176"},{"key":"S0956796800001210_ref022","doi-asserted-by":"crossref","unstructured":"Wadler P. (1990) Comprehending Monads. ACM Conf. LISP and Functional Programming, Nice, France.","DOI":"10.1145\/91556.91592"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800001210","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:18:04Z","timestamp":1776889084000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800001210\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1995,1]]},"references-count":23,"journal-issue":{"issue":"1","published-print":{"date-parts":[[1995,1]]}},"alternative-id":["S0956796800001210"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800001210","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1995,1]]}}}