Question about "Type checking a multithreaded functional language with session types" by Vasconcelos et al
I think

(Lambda [c→End, x:Int] . (close v))


is indeed what you need to write.  As you mention, it's "impossible" to write it because "c" is fresh.  From my reading of it, it does seem to be a problem in the paper.

I don't think this is a very serious problem, tho, since the same problem appears in other systems and has known solutions (look at the papers about "Calculus of Capabilities" or "Alias Types", for example).


if, as you do in your own syntax, you rely on type-inference, the problem disappears: the type inference can write the "c" since by that time it is known.
you can change accept and request to return two things: a type c and a value of type Chan C.  I.e. introduce "channel type parameters".  Indeed Chan c is a singleton type, so you need c to be able to parameterize over c in order to be able to do anything useful.