This article defines a set of type inference rules for resolving overloading introduced by type classes, as used in the functional programming language Haskell. Programs including type classes are transformed into ones which may be typed by standard Hindley-Milner inference rules. In contrast to other work on type classes, the rules presented here relate directly to Haskell programs. An innovative aspect of this work is the use of second-order lambda calculus to record type information in the transformed program.
%0 Journal Article
%1 Hall1996Type
%A Hall, Cordelia V.
%A Hammond, Kevin
%A Peyton Jones, Simon L.
%A Wadler, Philip L.
%D 1996
%J ACM Transactions on Programming Languages and Systems
%K 68-04-computer-science-explicit-machine-computation-and-programs 68n18-functional-programming-and-lambda-calculus 68n20-compilers-and-interpreters haskell
%N 2
%P 109--138
%R 10.1145/227699.227700
%T Type Classes in Haskell
%U http://ropas.snu.ac.kr/lib/dock/HaHaJoWa1996.pdf
%V 18
%X This article defines a set of type inference rules for resolving overloading introduced by type classes, as used in the functional programming language Haskell. Programs including type classes are transformed into ones which may be typed by standard Hindley-Milner inference rules. In contrast to other work on type classes, the rules presented here relate directly to Haskell programs. An innovative aspect of this work is the use of second-order lambda calculus to record type information in the transformed program.
@article{Hall1996Type,
abstract = {{This article defines a set of type inference rules for resolving overloading introduced by type classes, as used in the functional programming language Haskell. Programs including type classes are transformed into ones which may be typed by standard Hindley-Milner inference rules. In contrast to other work on type classes, the rules presented here relate directly to Haskell programs. An innovative aspect of this work is the use of second-order lambda calculus to record type information in the transformed program.}},
added-at = {2019-03-01T00:11:50.000+0100},
author = {Hall, Cordelia V. and Hammond, Kevin and {Peyton Jones}, Simon L. and Wadler, Philip L.},
biburl = {https://www.bibsonomy.org/bibtex/25927914313604f39f24fe99f43fc7324/gdmcbain},
citeulike-article-id = {14459704},
citeulike-attachment-1 = {hall_96_type.pdf; /pdf/user/gdmcbain/article/14459704/1120726/hall_96_type.pdf; f77abb9ec6281b547f132b13db2db97f9b4f8520},
citeulike-linkout-0 = {http://ropas.snu.ac.kr/lib/dock/HaHaJoWa1996.pdf},
citeulike-linkout-1 = {http://dx.doi.org/10.1145/227699.227700},
citeulike-linkout-2 = {https://dl.acm.org/citation.cfm?id=227700\#.WeUzWgblqxI.citeulike},
doi = {10.1145/227699.227700},
file = {hall_96_type.pdf},
interhash = {487408364cc98ba7d5d26b5c2aef3e99},
intrahash = {5927914313604f39f24fe99f43fc7324},
journal = {ACM Transactions on Programming Languages and Systems},
keywords = {68-04-computer-science-explicit-machine-computation-and-programs 68n18-functional-programming-and-lambda-calculus 68n20-compilers-and-interpreters haskell},
month = mar,
number = 2,
pages = {109--138},
posted-at = {2017-10-16 23:35:11},
priority = {4},
timestamp = {2019-03-01T00:11:50.000+0100},
title = {Type Classes in {H}askell},
url = {http://ropas.snu.ac.kr/lib/dock/HaHaJoWa1996.pdf},
volume = 18,
year = 1996
}