initialise-binding initialise-storing initialise-giving finalise-failing finalise-throwing scope (collateral (bind ("x", allocate-variable (values)), bind ("f", allocate-variable (functions (tuples ((values)*), values))), bind ("main", allocate-variable (functions (tuples ((values)*), values)))), sequential (null, assign (bound ("f"), function closure (scope (match (given, tuple (pattern closure (bind ("y", allocate-initialised-variable (values, given))))), handle-return (scope (bind ("t", allocate-initialised-variable (values, decimal-natural ("1"))), sequential (handle-thrown (sequential (print (assigned (bound ("t")), " "), print (decimal-natural ("8"), " ")), scope (bind ("p", allocate-initialised-variable (values, given)), print (integer-add (assigned (bound ("p")), decimal-natural ("10"))))), scope (bind ("i", allocate-initialised-variable (values, decimal-natural ("1"))), while (is-less-or-equal (assigned (bound ("i")), assigned (bound ("y"))), sequential (effect (give (integer-multiply (assigned (bound ("t")), assigned (bound ("i"))), sequential (assign (bound ("t"), given), given))), effect (give (bound ("i"), sequential (assign (given, integer-add (assigned (given), 1)), assigned (given))))))), return (assigned (bound ("t"))))))))), assign (bound ("main"), function closure (scope (match (given, tuple ()), handle-return (sequential (effect (give (decimal-natural ("5"), sequential (assign (bound ("x"), given), given))), print (apply (assigned (bound ("f")), tuple (assigned (bound ("x")))), "\n")))))), apply (assigned (bound ("main")), tuple ())))