fStmtBlock(Blockbs)inh=fst$foldr(\b((r,env'),varNr')->(wlpBlock(inh{acc=r,env=env',varNr=varNr'})b,varNr'+1))((accinh,envBlockbs(envinh)),varNrinh)bs-- The result of the last block-statement will be the accumulated transformer for the second-last etc. The type environment is build from the left, so it has to be done seperately.
fIfThenes1=fIfThenElsees1(const(id,[]))-- if-then is just an if-then-else with an empty else-block
fDoseinh=(fst(s(inh{acc=fst(fWhileesinh)})),envinh)-- Do is just a while with the statement block executed one additional time. Break and continue still have to be handled in this additional execution.
fBreak_inh=(brinh,envinh)-- wlp of the breakpoint. Control is passed to the statement after the loop
fBinOpe1ope2inh=(BinOp(getExpe1inh)op(getTranse1(inh{acc=id})(getExpe2inh)),(getTranse1(inh{acc=getTranse2inh}),envinh))-- Side effects of the first expression are applied before the second is evaluated, so we have to apply the transformer