We argue that the central problem of the interaction of higher-order programming with various kinds of effects can be tackled by eliminating the distinction: higher-order facility is itself an effect, not too different from state effect.
We demonstrate that first-class abstractions may be treated uniformly as any other effects, thus completing Cartwright and Felleisen’s program of “Extensible Denotational Language Specifications”: Variable substitution is indistinguishable from dereference of a C-like variable; “lambda”, or creating a closure, is an effect as well. The (lexical) closure acts as a handler of all variable dereference effects arising during the execution of its body. Our approach uniformly handles dynamic and lexical binding and various calling conventions.
All in all, higher-order programming is essentially first-order single-assignment programming with first-class storage. A framework like extensible-effects that supports multiple effects should not hence have any problem with abstraction and substitution effects – which gives HOPE.
|Extended Abstract (HOPE.pdf)||113KiB|