é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
7
A Polymorphic Modal Type System for Lisp-like
Multi-Staged Languages
1
F
s
g
H
fÖ
"
¦@
/
11/19/2005 SIGPL@
Ó/
½
N@
B
/
1
e
^
í
Hõ
B
N
/1
x
l
\
+
O
C. Calcagno
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
: “Û
^
¼Û
¼
Ð
o
Há
Ô
ÐÕ
ªÏ
`
þ
¦
$
í
¦z
´
'
r
v
H
Û
r
¼%
`
7
¦ë
[
ß
t
þ
¦z
·#
Qכ
¹.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
: “Û
^
¼Û
¼
Ð
o
Há
Ô
ÐÕ
ªÏ
`
þ
¦
$
í
¦z
´
'
r
v
H
Û
r
¼%
`
7
¦ë
[
ß
t
þ
¦z
·#
Qכ
¹.”
: “
s
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
#
Qr
Û
¼%
s
7
ê
Í|
ø
X
<.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
: “Û
^
¼Û
¼
Ð
o
Há
Ô
ÐÕ
ªÏ
`
þ
¦
$
í
¦z
´
'
r
v
H
Û
r
¼%
`
7
¦ë
[
ß
t
þ
¦z
·#
Qכ
¹.”
: “
s
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
#
Qr
Û
¼%
s
7
ê
Í|
ø
X
<.”
: “Õ
^
ª
r
Û
¼%
Ü
7
¼
Ð (s
{
$
9
{
)”
9
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
(/
N
B
õ
©
Æ)
<
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
: “Û
^
¼Û
¼
Ð
o
Há
Ô
ÐÕ
ªÏ
`
þ
¦
$
í
¦z
´
'
r
v
H
Û
r
¼%
`
7
¦ë
[
ß
t
þ
¦z
·#
Qכ
¹.”
: “
s
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
#
Qr
Û
¼%
s
7
ê
Í|
ø
X
<.”
: “Õ
^
ª
r
Û
¼%
Ü
7
¼
Ð (s
{
$
9
{
)”
9
(/
N
B
õ
©
Æ)
<
: “]
s
j@
/
Ð
a
)
{
r
9
Û
¼%
Ä
7
º
ë
[
ß
t
þ
.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
ª1
Õ
xî
l
ß
e
^
í
H~
Ì
Ã
ü
<
3¸
ç
_
ß
#
QÑ
v
ü
¦|
'
V
,
: “Û
^
¼Û
¼
Ð
o
Há
Ô
ÐÕ
ªÏ
`
þ
¦
$
í
¦z
´
'
r
v
H
Û
r
¼%
`
7
¦ë
[
ß
t
þ
¦z
·#
Qכ
¹.”
: “
s
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
#
Qr
Û
¼%
s
7
ê
Í|
ø
X
<.”
: “Õ
^
ª
r
Û
¼%
Ü
7
¼
Ð (s
{
$
9
{
)”
9
(/
N
B
õ
©
Æ)
<
: “]
s
j@
/
Ð
a
)
{
r
9
Û
¼%
Ä
7
º
ë
[
ß
t
þ
.”
ªo
Õ
H'
4
V
,
ÐÀ
Ï
1
9[
t#
þ
Q
.
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç Multi-Staged Programming (1/2)
b
á
Ô
ÐÕ
ªÏ
%
þ
Û
7
¼à
Ô Ô
á
ÐÕ
ªÏ
_
þ
X
<s
program texts are the first class objects
meta programming
>
ß
é
0: {
ì
9
Íá
ø
Ô
ÐÕ
ªA
b
ç
>
ß
é
n + 1: é
>
ß
n á
Ô
ÐÕ
ªÏ
s
þ
ë
[
ß
t#
þ
Q?
/
Há
Ô
ÐÕ
ªÏ
þ
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç Multi-Staged Programming (2/2)
b
s
p
¦î
ß
a#
)
Qt
[
כ
t`
þ
¦
í[
O
H{
ì
9
Í>
ø
h¥
Æ
Lisp/Scheme_
ï
r
6
x(quasi-quatation)
Òì
Â
r>
í
(partial evaluation)
ß
´'
z
×
æ\
z
´'
ï×
¼ë
[
ß
tl
þ
(runtime code generation)
ß
B
¼
Ð(macro)
“
o
H
ï×
¼(evolutionary code)” “·
ú
"
f ú̧
H
ï×
¼(autonomous code)”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç
b
#
Q
e ::= c | x | λx.e | e e
|
‘e
code constant
|
,e
code composition
|
run e
execute code
|
lift e
value to code
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(1/5)
í
ß
é
HB
ß
¼
ÐÔ
á
ÐÕ
ªA
b
ç
let NULL = ‘0
let body = ‘(if x= ,NULL then abort() else ...)
in run body
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(2/5)
\
¦
B
ß
¼
ÐÔ
á
ÐÕ
ªA
b
ç
let or(a,b) = ‘(let v = ,a in if v then v else ,b end)
in if run(or code1 code2) then ... else ...
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(2/5)
\
¦
B
ß
¼
ÐÔ
á
ÐÕ
ªA
b
ç
let or(a,b) = ‘(let v = ,a in if v then v else ,b end)
in if run(or code1 code2) then ... else ...
¢̧
H
let repeatUntil(s,c) = ‘(,s; while ,c do ,s)
let xloop = repeatUntil(‘(x = x+1), ‘(x<10))
let x = 0
in run xloop
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(3/5)
“
1
x
l
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
(partial evaluation)
ß
power(n,x) = if n=0 then 1 else x * power(n-1,x)
@
/
power(3,x) = x*x*x
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(3/5)
“
1
x
l
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
(partial evaluation)
ß
power(n,x) = if n=0 then 1 else x * power(n-1,x)
@
/
power(3,x) = x*x*x
s
X
>
O
ï
rq
let spower(n) =
if n=0 then ‘1 else ‘(x * ,(spower (n-1)) )
let fastpower100 = ‘(λx. ,(spower 100))
in (run fastpower100)(10); (run fastpower100)(20)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(4/5)
“
1
x
l
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
(partial evaluation)
ß
let map [] f = []
| map (x::r) f = (f x)::(map r f)
/
@
let map [x,y,z] f = [f x, f y, f z]
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(4/5)
“
1
x
l
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
(partial evaluation)
ß
let map [] f = []
| map (x::r) f = (f x)::(map r f)
/
@
let map [x,y,z] f = [f x, f y, f z]
s
X
>
O
ï
rq
:
let smap [] = ‘[]
| smap (x::r) = ‘((f ,x) :: ,(smap r))
let fastmap3 = ‘(λ f. ,(smap [1,2,3]))
in (run fastmap3) inc; (run fastmap3) dec
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç\
b
V(5/5)
ï×
¼ $
÷
©
&
¦Ì
t
q
÷
&
¦
let a = ref ‘1
f = ‘(λ x. ,(a := ‘(x+1); ‘2))
in !a
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç
b
#
Q
½
¨
é
>
ß
á
Ô
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe
H
#
Q
Hÿ
.
?
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç
b
#
Q
½
¨
é
>
ß
á
Ô
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe
H
#
Q
Hÿ
.
?
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
r&
É
ñ
\
O
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç
b
#
Q
½
¨
é
>
ß
á
Ô
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe
H
#
Q
Hÿ
.
?
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
r&
É
ñ
\
O
/ ]
?
j&
ñ
s
%
3
Ht
S
X
K
Å
Ò
H
¸½
¨ e
%
Ü
3
¼
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
é
>
ß
Ô
á
ÐÕ
ªA
ç
b
#
Q
½
¨
é
>
ß
á
Ô
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe
H
#
Q
Hÿ
.
?
é
>
ß
á
Ô
ÐÕ
ªA
b
ç
r&
É
ñ
\
O
/ ]
?
j&
ñ
s
%
3
Ht
S
X
K
Å
Ò
H
¸½
¨ e
%
Ü
3
¼
_
²
: ú
é
>
ß
#
Q_
î
ß
ô
Ç
{
r
9
Û
¼%
7
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
Hë
7
H_
ô
Ç{
9
é
>
ß
á
Ô
ÐÕ
ªA
b
`
ç
¦0
Aô
Ç
{
r
9
Û
¼%
7
¦î
ß
Å
ô
Å
Ç
{
r
9
Û
¼%
7
é
>
ß
á
Ô
ÐÕ
ªA
b
_
ç
z
´]
j\
¦
¸¿
º)
6
x
ß
î
ô
Ç
{
r
9
Û
¼%
7
#
b
Q
¸a
~
%
ú
·
¦o
7
§s
£
a
~É
%
r
{
r
9
Û
¼%
7
æz
Ø
´ô
ǽ
¨
³
&
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
~
%
a
r
É
{
r
9
Û
¼%
(1/2)
7
é
>
ß
á
Ô
ÐÕ
ªA
b
_
ç
z
´]
j\
¦
¸¿
º)
6
xK
(pragmatism)
j
]
s
\
O
H
ï×
¼X
<s
(code as 1st class object)
ï×
¼î
\
ß
Ä
»
Ðî
rs
2
§[
£
t(open code): ‘(x+1)
þ
Ô
á
ÐÕ
ªA
Q
×
þ
¸2
¤:
ü
Ó
s
2
§_
£
1
x\
l
y
(non alpha-equivalence, unhygienic
manipulation of code): é
>
ß
>0
ü
Ó
s
2
§_
£
1
x\
l
Ô
¦y
(alpha-equivalence, hygienic
manipulation of code): é
>
ß
0
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
~
%
a
r
É
{
r
9
Û
¼%
(2/2)
7
t
F
K
t
_
$
/
í
N`
B
¦
>5
qÄ
Å
»t
K
(conservative extension)
o
,
V
æ
¼s
H, z
´6
x&
h
î
ß
ô
Ç
{
r
9
Û
¼%
Ä
7
»t
ML_
let-polymorphism1
x
p
é
>
ß
{
r
9
Û
¼%
M
7
:ë
H\
\
V
\
a
~~
%
s
כ
\
#
O
Qt
ú́
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
r
É
rÛ
¼%
õ
7
s
1 closed code and eval
2 open code
3 reference
4 type inference
5 variable-capturing substitution
6 capture-avoiding substitution
Our System
+1+2+3+4+5+6
λ2
+1(+3+4)-2-5-6
(1996, 2001)
λ
+2+6-1-3-4-5
(1996)
MetaML, MetaOcaml
+1+2+4+6-3-5
(2000, 2001)
Nanevsky-Pfenning
+1+2(+3)+6-4-5
(2002)
λ+
code
λi
+1+2+3+5-4-6
(2003)
+1+2+4+6-3-5
(2004)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
í
ß
é
H
{
r
9
Û
¼%
λsim
7
open (1/3)
ï×
¼_
{
:
9
ï×
¼_
Ä
»
Ã
º\
@
/ô
Ç
{
9
[
t`
þ
¦
‘(x+1) : 2({x : int}ρ . int)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
í
ß
é
H
{
r
9
Û
¼%
λsim
7
open (2/3)
T ypes A, B ::= ι | A → B | 2(Γ . A) | A ref
fin
T ypeEnvironments Γ
∈
TyEnv = Var → Type
StoreT ypings Σ
∈
ST
fin
= Loc → Type
{
ó
9
Íé
ø
(typing judgment)
ß
Σ; Γ0 ··· Γn ` e : A
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
í
ß
é
H
{
r
9
Û
¼%
λsim
7
open (3/3)
(TSVAR)
Γn (x) = A
Σ; Γ0 ··· Γn ` x : A
(TSABS)
Σ; Γ0 ··· Γn + x : A ` e : B
Σ; Γ0 ··· Γn ` λx.e : A → B
(TSAPP)
Σ; Γ0 ··· Γn ` e1 : A → B
Σ; Γ0 ··· Γn ` e2 : A
Σ; Γ0 ··· Γn ` e1 e2 : B
(TSBOX)
Σ; Γ0 ··· Γn Γ ` e : A
Σ; Γ0 ··· Γn ` ‘e : 2(Γ . A)
(TSUNBOX)
(TSEVAL)
Σ; Γ0 ··· Γn−1 ` e : 2(Γn . A)
Σ; Γ0 ··· Γn ` ,e : A
k>0
Σ; Γ0 ··· Γn ` e : 2(∅ . A)
Σ; Γ0 ··· Γn ` run e : A
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
+
A(polymorphic) þ
{
r
9
Û
¼%
λpoly
7
open (1/3)
ML_
+
A
þ
{
r
9
¼
Û%
`
7
¦ Rémy_
Y
U
ï×
¼
{
r
9
Û
¼%
Ü
7
¼
ÐS
X
©
if e then ‘(x+1) else ‘1:
2({x : int}ρ . int)
else-branch: 2(ρ0 . int)
then-branch: 2({x : int}ρ . int)
let val x = ‘y in ‘(,x + 1); ‘((,x 1) + z) end:
x: ∀α∀ρ.2({y : α}ρ . α)
first x: 2({y : int} . int)
second x: 2({y : int → int, z : int} . int → int)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
λpoly
7
open (2/3)
fin
Store Typings
Σ
∈
StoTy
=
Loc → Type
Type Environments
Γ
∈
TyEnv
=
Var → Field
fin
k
::= {xi : Ai }m
1 | {xi : Ai }1 ρ
Type Env. Vars
Type Schemes
Type Scheme Env
ρ
∈
TyEnvVar
τ, σ
∈
TyScheme
::=
∀ξ.τ | A
∆
∈
TySchemeEnv
=
Var → FieldScheme
fin
k
::= {xi : µi }m
1 | {xi : µi }1 ρ
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
λpoly
7
open (2/3)
fin
Store Typings
Σ
∈
StoTy
=
Loc → Type
Type Environments
Γ
∈
TyEnv
=
Var → Field
fin
k
::= {xi : Ai }m
1 | {xi : Ai }1 ρ
Type Env. Vars
Type Schemes
Type Scheme Env
ρ
∈
TyEnvVar
τ, σ
∈
TyScheme
::=
∀ξ.τ | A
∆
∈
TySchemeEnv
=
Var → FieldScheme
fin
k
::= {xi : µi }m
1 | {xi : µi }1 ρ
(TVAR)
∆n (x) A
Σ; ∆0 ··· ∆n ` x : A
(TABS)
Σ; ∆0 ··· ∆n + x : A ` e : B
Σ; ∆0 ··· ∆n ` λx.e : A → B
(TAPP)
Σ; ∆0 ··· ∆n ` e1 : A → B
Σ; ∆0 ··· ∆n ` e2 : A
Σ; ∆0 ··· ∆n ` e1 e2 : B
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
λpoly
7
open (3/3)
(TBOX)
Σ; ∆0 ··· ∆n Γ ` e : A
Σ; ∆0 ··· ∆n ` ‘e : 2(Γ . A)
(TUNBOX)
Σ; ∆0 ··· ∆n ` e : 2(Γ . A) ∆n+1 Γ k > 0
Σ; ∆0 ··· ∆n+1 ` ,e : A
(TEVAL)
Σ; ∆0 ··· ∆n ` e : 2(∅ . A)
Σ; ∆0 ··· ∆n ` run e : A
¬ expansiven (e1 )
Σ; ∆0 ··· ∆n ` e1 : A
(TLETAPP)
Σ; ∆0 ··· ∆n + x : GENA (Σ, ∆0 ··· ∆n ) ` e2 : B
Σ; ∆0 ··· ∆n ` let (x e1 ) e2 : B
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
{
9
rÛ
¼%
_
7
î
ß
$
í
Lemma (Preservation)
Let |= S : Σ, Σ |= E : ∆0 . If
n
Σ; ∆0 ··· ∆n ` e : A, and E, S, V ` e −→ (r, S 0 , V 0 ),
then,
Σ0 ; ∅∆1 ··· ∆n ` r : A
and
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
|= S 0 : Σ0 for some Σ0 ⊇ Σ.
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
{
9
rÛ
¼%
_
7
·
¦
ú
o
7
§
£
Lemma (Soundness)
If infer(∆0 ··· ∆n , e, A, Q) succeeds with S, then
∅; (S∆0 )··· (S∆n ) ` e : SA.
Lemma (Completeness)
If ∅; (R∆0 )··· (R∆n ) ` e : RA then infer(∆0 ··· ∆n , e, A, Q)
−
succeeds with S such that R|−
Q = T S|Q for some T and
Sn
RV(S) ⊆ Q ∪ FV(A) ∪ i=0 FV(∆i ).
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
S
>
\
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
S
>
\
λpoly
{
r
9
Û
¼%
`
7
¦ nML\
©
Ì: nML 2.0
Ã
open “Staged nML” <
Ê
r “MetanML” :-)
É
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
S
>
\
λpoly
{
r
9
Û
¼%
`
7
¦ nML\
©
Ì: nML 2.0
Ã
open “Staged nML” <
Ê
r “MetanML” :-)
É
Ô
á
ÐÕ
ªÏ
_
þ
ì
r$
ë
3
H]
j: F
KF
g
cfa, exception analysis, secure flow analysis, · · ·
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
S
>
\
λpoly
{
r
9
Û
¼%
`
7
¦ nML\
©
Ì: nML 2.0
Ã
open “Staged nML” <
Ê
r “MetanML” :-)
É
Ô
á
ÐÕ
ªÏ
_
þ
ì
r$
ë
3
H]
j: F
KF
g
cfa, exception analysis, secure flow analysis, · · ·
y
½
Ëm
+
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@
Ó/
½
N@
B
/
é
>
ß
á
Ô
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
A Polymorphic Mod
7
© Copyright 2025 Paperzz