### Breaking [ Datatype breaking Funcon broken Funcon finalise-breaking Funcon break Funcon handle-break ] Meta-variables T <: values Datatype breaking ::= broken /* `broken` is a reason for abrupt termination. */ Funcon finalise-breaking(X:=>T) : =>T|null-type ~> finalise-abrupting(X) /* `finalise-breaking(X)` handles abrupt termination of `X` due to executing `break`. */ Funcon break : =>empty-type ~> abrupt(broken) /* `break` abruptly terminates all enclosing computations until it is handled. */ Funcon handle-break(_:=>null-type) : =>null-type /* `handle-break(X)` terminates normally when `X` terminates abruptly for the reason `broken`. */ Rule X --abrupted( )-> X' ------------------------------------------------ handle-break(X) --abrupted( )-> handle-break(X') Rule X --abrupted(broken)-> _ --------------------------------------- handle-break(X) --abrupted( )-> null-value Rule X --abrupted(V:~breaking)-> X' ------------------------------------------------ handle-break(X) --abrupted(V)-> handle-break(X') Rule handle-break(null-value) ~> null-value