initialise-binding initialise-storing initialise-giving finalise-failing finalise-throwing scope (collateral (bind ("main", allocate-variable (functions (tuples ((values)*), values))), bind ("foo", allocate-variable (functions (tuples ((values)*), values)))), sequential (assign (bound ("main"), function closure (scope (match (given, tuple ()), handle-return (handle-thrown (effect (apply (assigned (bound ("foo")), tuple ())), scope (bind ("e", allocate-initialised-variable (values, given)), print (assigned (bound ("e")), "\n"))))))), assign (bound ("foo"), function closure (scope (match (given, tuple ()), handle-return (sequential (handle-thrown (sequential (throw (decimal-natural ("5")), print (decimal-natural ("17"))), scope (bind ("e", allocate-initialised-variable (values, given)), throw (integer-add (assigned (bound ("e")), decimal-natural ("2"))))), throw (decimal-natural ("1"))))))), apply (assigned (bound ("main")), tuple ())))