Transposing F to C#: Expressivity of parametric polymorphism in an object-oriented language

Concurrency and Computation: Practice and Experience | , Vol 16(7)

to appear

We present a type-preserving translation of System F (the polymorphic lambda calculus)
into a forthcoming revision of the C] programming language supporting parameterized
classes and polymorphic methods. The forthcoming revision of Java in JDK 1.5 also
makes a suitable target. We formalize the translation using a subset of C] similar to
Featherweight Java. We prove that the translation is fully type-preserving and that it
preserves behaviour via the novel use of an environment-style semantics for System F.
We observe that whilst parameterized classes alone are sufficient to encode the
parameterized datatypes and let-polymorphism of languages such as ML and Haskell, it
is the presence of dynamic dispatch for polymorphic methods that supports the encoding
of the “first-class polymorphism” found in System F and recent extensions to ML and
Haskell.