Ur is a pure language; we use Haskell's trick to support controlled side effects. The standard library defines a monad , meant to stand for actions that may be undone cleanly. By design, no other kinds of actions are supported.
For debugging purposes, a transactional function is provided for outputting a string on the server process' stderr.