  Reversible computing models settings in which all processes can be reversed.
Applications include low-power computing, quantum computing, and robotics. It
is unclear how to represent side-effects in this setting, because conventional
methods need not respect reversibility. We model reversible effects by adapting
Hughes' arrows to dagger arrows and inverse arrows. This captures several
fundamental reversible effects, including serialization and mutable store
computations. Whereas arrows are monoids in the category of profunctors, dagger
arrows are involutive monoids in the category of profunctors, and inverse
arrows satisfy certain additional properties. These semantics inform the design
of functional reversible programs supporting side-effects.
