++- Selene                                                 ** Veronica

transact = sender receiver amount ->                       (@ transact sender receiver amount +-
  + alarm ->                                                   (\ alarm >
    - step-by-step (                                               (# step-by-step (@ +-
                     - debit   <                                       (# debit   (%
                                 cid : sender                                         cid sender
                                 sum : amount                                         sum amount
                               >,                                                 )
                       credit  <                                       )
                                 cid : receiver                        (# credit  (%
                                 sum : amount                                         cid receiver
                               >,                                                     sum amount
                       journal <                                                  )
                                 opcode : JR_TRANSFER                  )
                                 cid-1  : sender                       (# journal (%
                                 cid-2  : receiver                                    opcode JR_TRANSFER
                                 amount : _                                           cid-1  sender
                               >                                                      cid-2  receiver
                   )                                                                  amount _
  + ec, error >                                                                   )
    log error; handle ec                                               )
  ;                                                                )
                                                               + ec error >
  task-name = 'transact ' receiver                                 (log error)
              ' < ' sender ' (' amount ')'                         (# handle ec)
                                                               )
  if alarm ->                                                  (& 'transact ' receiver
    log LOG_SPACES task-name                                      ' < ' sender ' (' amount ')' .task-name)
  else                                                         ([alarm] >
    log LOG_EXCLAMATION task-name                                  (log LOG_SPACES task-name)
  ;                                                            >
_                                                                  (log LOG_EXCLAMATION task-name)
  sender, receiver : integer                                   )
  amount : float                                           +
;                                                              {integer} sender receiver
                                                               {float} amount
                                                           )
