Representable Continuations
(Remind me to explain this more clearly at some point).
Why representable continuations are important for Links:
fun do_something()
{
creds = validate_user(); # if the user isn't signed in, throw a login page, continue from here when finished
# if user never validates, this never returns
if (user_can_do_something(creds) then
do_it()
else display_error()
}
fun validate_user()
{
user_cookie = get_cookie('user')
(username, password) = regex.match("(.*):(.*)", user_cookie);
if not valid_creds(username, password) then
login_screen(handler)
else
(username, password)
}
fun login_screen(handler) {
throw_page(...)
}
This can't be done if the l:action must always be a complete expression. "validate_user" needs to be like a subroutine that can be invoked from anywhere, even though it has its own handler (its own l:action). That means the serialized form action must include the complete continuation, not just an expression.