Newer
Older
The related work in this paper is more important than in the last
because it's actual call-by-value stuff.
There is a difficulty though. Our result here is graduality + eta +
function casts are pure => wrapping function casts.
Exploring the Design Space of Higher-Order Casts (Siek-Garcia-Taha)
does a bit of a survey. What is wrong (or right) with it from our
perspective?
1. The eager semantics is not extensional.
The cast where (B = bool, I = int, D = dyn)
<B -> I <= D -> D><D -> D <= I -> I>(lambda x. t) |-> err
but if we eta-expand the inside, it is a value(!)
<B -> I <= D -> D>(lambda y. (<D -> D <= I -> I>(lambda x. t) y)
2. The downcast semantics is not *compositional* in that
upcasts/downcasts A -> B -> C do not factorize. Does it actually
violate the gradual guarantee? Doubtful.