  Effect handlers have been gathering momentum as a mechanism for modular
programming with user-defined effects. Effect handlers allow for non-local
control flow mechanisms such as generators, async/await, lightweight threads
and coroutines to be composably expressed. We present a design and evaluate a
full-fledged efficient implementation of effect handlers for OCaml, an
industrial-strength multi-paradigm programming language. Our implementation
strives to maintain the backwards compatibility and performance profile of
existing OCaml code. Retrofitting effect handlers onto OCaml is challenging
since OCaml does not currently have any non-local control flow mechanisms other
than exceptions. Our implementation of effect handlers for OCaml: (i) imposes a
mean 1% overhead on a comprehensive macro benchmark suite that does not use
effect handlers; (ii) remains compatible with program analysis tools that
inspect the stack; and (iii) is efficient for new code that makes use of effect
handlers.
