anchor.diff:                  ))
                   stack.Push(CompileTarget expr)
               | LetRecursive (varAndExprList, body) ->
  -                stack.Push(Compiling (fun _ ->
  -                  varEnv := (!varEnv) |> Seq.skip varAndExprList.Length |> Seq.toList
  -                ))
  +                let assumptionOpt = tryPopAssumption stack
  +                pushTearDown assumptionOpt (fun _ -> varEnv := !varEnv |> Seq.skip varAndExprList.Length |> Seq.toList) stack
                   stack.Push(CompileTarget body)
                   for var, expr in varAndExprList do
                     let local = gen.DeclareLocal(var.Name, var.Type)
  
positive.code: 
    type ICompiledType<'T> =
      abstract member ExecuteCompiledCode: unit -> 'T
  
    let compile (expr: Expr<'T>) : 'T =
      let asm =
  
negative.code:                 let falseLabel = gen.DefineLabel()
                  let ifEndLabel = gen.DefineLabel()
  
                  let assumptionOpt = tryPopAssumption stack
                  pushTearDown assumptionOpt (fun gen -> gen.MarkLabel(ifEndLabel)) stack
                  stack.Push(CompileTarget falsePart)
                  pushTearDown assumptionOpt (fun gen -> gen.Emit(Br ifEndLabel); gen.MarkLabel(falseLabel)) stack
                  stack.Push(CompileTarget truePart)
                  stack.Push(Compiling (fun gen ->
                    gen.Emit(Brfalse falseLabel)
  