research.microsoft.com/Users/simonpj/ We present a novel inference algorithm for a type system featuring subtyping and usage (annotation) polymorphism. This algorithm infers simply-polymorphic types rather than the constrained-polymorphic types usual in such a setting; it achieves this by means of constraint approximation. The algorithm is motivated by practical considerations and experience of a previous system, and has been implemented in a production compiler with positive results. We believe the algorithm may well have applications in settings other than usage-type inference. 1
|
762
|
On understanding types, data abstraction, and polymorphism
– Cardelli, Wegner
- 1985
|
|
303
|
Subtyping recursive types
– Amadio, Cardelli
- 1993
|
|
249
|
Compiling polymorphism using intensional type analysis
– Harper, Morrisett
- 1995
|
|
196
|
Type inclusion constraints and type inference
– Aiken, Wimmers
- 1993
|
|
176
|
Implementing lazy functional languages on stock hardware: the spineless tagless g-machine
– Jones
- 1992
|
|
148
|
A natural semantics for lazy evaluation
– Launchbury
- 1993
|
|
147
|
Purely Functional Data Structures
– Okasaki
- 1998
|
|
134
|
Soft typing
– Cartwright, Fagan
- 1991
|
|
126
|
logic, its syntax and semantics
– Linear
- 1995
|
|
114
|
An extension of system F with subtyping
– Cardelli, Martini, et al.
- 1991
|
|
111
|
Introduction to Algorithms: A Creative Approach
– Manber
- 1989
|
|
100
|
Linear types can change the world
– WADLER
- 1990
|
|
99
|
Componential set-based analysis
– Flanagan, Felleisen
- 1997
|
|
96
|
Lazy functional state threads
– Launchbury, Jones
- 1997
|
|
87
|
Unboxed values as first class citizens in a non-strict functional language
– Jones, Launchbury
- 1991
|
|
84
|
Is there a use for linear logic
– Wadler
- 1991
|
|
74
|
Once upon a type
– Turner, Wadler, et al.
- 1995
|
|
72
|
A transformation-based optimiser for Haskell
– Jones, Santos
- 1998
|
|
66
|
Subtyping Constrained Types
– Trifonov, Smith
- 1996
|
|
64
|
Nested datatypes
– Bird, Meertens
- 1998
|
|
64
|
Global/local subtyping and capability inference for a distributed πcalculus
– Sewell
- 1996
|
|
63
|
Type inference with constrained types. Theory and practice of object systems
– Odersky, Sulzmann, et al.
- 1999
|
|
58
|
The nofib benchmark suite of Haskell programs.In
– Partain
- 1992
|
|
56
|
A taste of linear logic
– Wadler
- 1993
|
|
52
|
Semantics of weakening and contraction
– Jacobs
- 1994
|
|
52
|
Effective flow analysis for avoiding run-time checks
– Jagannathan, Wright
- 1995
|
|
49
|
Cheap deforestation for non-strict functional languages
– Gill
- 1996
|
|
47
|
Let-floating: moving bindings to give faster programs
– Jones, Partain, et al.
- 1996
|
|
46
|
Implementing Functional Languages, A Tutorial
– Jones, Lester
- 1992
|
|
40
|
Strictness analysis in logical form
– Jensen
- 1991
|
|
40
|
A practical subtyping system for Erlang
– Marlow, Wadler
- 1997
|
|
31
|
Once upon a polymorphic type
– Wansbrough, Jones
- 1999
|
|
30
|
Simplifying subtyping constraints: a theory
– Pottier
- 2001
|
|
29
|
Typability and type checking in the second-order -calculus are equivalent and undecidable
– Wells
- 1994
|
|
28
|
Improvement in a lazy context: an operational theory for call-by-need
– Moran, Sands
- 1999
|
|
28
|
The call-by-need lambda calculus
– Maraist, Odersky, et al.
- 1998
|
|
27
|
Constrained Quantification in Polymorphic Type Analysis
– Curtis
- 1987
|
|
26
|
Polarized Higher-Order Subtyping
– Steffen
- 1994
|
|
24
|
Constrained types and their expressiveness
– Palsberg, Smith
- 1996
|
|
23
|
Polymorphic Recursion and Subtype Qualifications: Polymorphic Binding-Time Analysis in Polynomial Time
– Dussart, Henglein, et al.
|
|
22
|
Optimizing lazy functional programs using flow inference
– Fax'en
- 1995
|
|
20
|
Linear logic
– Lincoln
- 1992
|
|
20
|
Optimal representations of polymorphic types with subtyping
– Aiken, Wimmers, et al.
- 1997
|
|
19
|
An implementation of F
– Cardelli
|
|
16
|
Type inference in systems of recursive types with subtyping. http://www. cs.purdue.edu/homes/palsberg
– Jim, Palsberg
- 1999
|
|
15
|
A modular fully-lazy lambda lifter
– Peyton-Jones, Lester
- 1991
|
|
12
|
Types for 0, 1 or many uses
– Mogensen
- 1997
|
|
12
|
Polymorphic recursion and subtype quali Polymorphic binding-time analysis in polynomial time
– Dussart, Henglein, et al.
- 1995
|
|
11
|
Detecting sharing of partial applications in functional programs
– Goldberg
- 1987
|
|
11
|
Update avoidance analysis by abstract interpretation
– Marlow
- 1993
|