Link Search Menu Expand Document

Funcons-beta : Failing.cbs | PRETTY | PDF


Failing

[
  Datatype failing
  Funcon   failed
  Funcon   finalise-failing
  Funcon   fail
  Funcon   else
  Funcon   else-choice
  Funcon   checked
  Funcon   check-true
]
Meta-variables
  T <: values
Datatype
  failing ::= failed

failed is a reason for abrupt termination.

Funcon
  finalise-failing(X:=>T) : =>T|null-type
   ~> finalise-abrupting(X)

finalise-failing(X) handles abrupt termination of X due to executing fail.

Funcon
  fail : =>empty-type
   ~> abrupt(failed)

fail abruptly terminates all enclosing computations until it is handled.

Funcon
  else(_:=>T, _:(=>T)+) : =>T

else(X1, X2, ...) executes the arguments in turn until either some Xi does not fail, or all arguments Xi have been executed. The last argument executed determines the result. else(X, Y) is associative, with unit fail.

Rule
           X --abrupted( )-> X′
  --------------------------------------
  else(X, Y) --abrupted( )-> else(X′, Y)
Rule
           X --abrupted(failed)-> _
  ---------------------------------
  else(X, Y) --abrupted( )-> Y
Rule
           X --abrupted(V:~failing)-> X′
  --------------------------------------
  else(X, Y) --abrupted(V)-> else(X′, Y)
Rule
  else(V:T, Y) ~> V
Rule
  else(X, Y, Z+) ~> else(X, else(Y, Z+))
Funcon
  else-choice(_:(=>T)+) : =>T

else-choice(X,...) executes the arguments in any order until either some Xi does not fail, or all arguments Xi have been executed. The last argument executed determines the result. else(X, Y) is associative and commutative, with unit fail.

Rule
  else-choice(W*, X, Y, Z*)
   ~> choice(else(X, else-choice(W*, Y, Z*), 
             else(Y, else-choice(W*, X, Z*))))
Rule
  else-choice(X) ~> X
Funcon
  check-true(_:booleans) : =>null-type
Alias
  check = check-true

check-true(X) terminates normally if the value computed by X is true, and fails if it is false.

Funcon 
  checked(_:(T)?) : =>T

checked(X) fails when X gives the empty sequence of values ( ), representing that an optional value has not been computed. It otherwise computes the same as X.

Rule
  checked(V:T) ~> V
Rule
  checked( ) ~> fail