  Algebraic effects & handlers are a modular approach for modeling side-effects
in functional programming. Their syntax is defined in terms of a signature of
effectful operations, encoded as a functor, that are plugged into the free
monad; their denotational semantics is defined by fold-style handlers that only
interpret their part of the syntax and forward the rest. However, not all
effects are algebraic: some need to access an internal computation. For
example, scoped effects distinguish between a computation in scope and out of
scope; parallel effects parallellize over a computation, latent effects defer a
computation. Separate definitions have been proposed for these higher-order
effects and their corresponding handlers, often leading to expedient and
complex monad definitions. In this work we propose a generic framework for
higher-order effects, generalizing algebraic effects & handlers: a generic free
monad with higher-order effect signatures and a corresponding interpreter.
Specializing this higher-order syntax leads to various definitions of
previously defined (scoped, parallel, latent) and novel (writer, bracketing)
effects. Furthermore, we formally show our framework theoretically correct,
also putting different effect instances on formal footing; a significant
contribution for parallel, latent, writer and bracketing effects.
