MLF: An extension of ML with first-class polymorphism and implicit instantiation
MLF : Une extension de ML avec polymorphisme de second ordre et instanciation implicite
Résumé
We propose a type system MLF that generalizes ML with first-class
polymorphism as in System F. Expressions may contain second-order type
annotations. Every typable expression admits a principal type, which
however depends on type annotations. Principal types capture all other
types that can be obtained by implicit type instantiation
and they can be inferred.
All expressions of ML are well-typed without any annotations.
All expressions of System F can be mechanically encoded into MLF
by dropping all type abstractions and type applications,
and injecting type annotations of lambda-abstractions into MLF types.
Moreover, only parameters of lambda-abstractions that are used
polymorphically need to remain annotated.
polymorphism as in System F. Expressions may contain second-order type
annotations. Every typable expression admits a principal type, which
however depends on type annotations. Principal types capture all other
types that can be obtained by implicit type instantiation
and they can be inferred.
All expressions of ML are well-typed without any annotations.
All expressions of System F can be mechanically encoded into MLF
by dropping all type abstractions and type applications,
and injecting type annotations of lambda-abstractions into MLF types.
Moreover, only parameters of lambda-abstractions that are used
polymorphically need to remain annotated.
Nous nous intéressons à une extension de ML avec polymorphisme
de première classe, à la manière du Système F.
Cette extension, nommée MLF, utilise les annotations de types
d'ordre supérieur données explicitement dans le programme pour inférer
de manière principale le type le plus général. Toute expression admet
ainsi un type principal, qui dépend des annotations présentes
initialement dans le programme.
Toute expression de ML est typable dans MLF sans annotation
supplémentaire. Les expressions du Système F sont encodées de
manière systématique dans MLF en supprimant les abstractions
et les applications de types, et en traduisant les annotations
de types dans le langage de types de MLF.
De plus, les paramètres de lambda-abstractions qui ne sont pas
utilisés de manière polymorphe n'ont pas besoin d'être annotés.
de première classe, à la manière du Système F.
Cette extension, nommée MLF, utilise les annotations de types
d'ordre supérieur données explicitement dans le programme pour inférer
de manière principale le type le plus général. Toute expression admet
ainsi un type principal, qui dépend des annotations présentes
initialement dans le programme.
Toute expression de ML est typable dans MLF sans annotation
supplémentaire. Les expressions du Système F sont encodées de
manière systématique dans MLF en supprimant les abstractions
et les applications de types, et en traduisant les annotations
de types dans le langage de types de MLF.
De plus, les paramètres de lambda-abstractions qui ne sont pas
utilisés de manière polymorphe n'ont pas besoin d'être annotés.
Loading...