Specification([Signature([Constructors([ExtOpDecl("Nil",ConstType(Sort("List",[SortVar("a")])))])]),Strategies([SDefT("main_0_0",[],[],Scope(["b_0"],GuardedLChoice(Seq(Build(Anno(Int("1"),Op("Nil",[]))),Seq(Match(Var("b_0")),Fail)),Id,Seq(CallT(SVar("try_1_0"),[Fail],[]),Seq(Build(Var("b_0")),Seq(CallT(SVar("debug_1_0"),[Build(Anno(Str("c is still bound: "),Op("Nil",[])))],[]),Seq(Build(Anno(Int("2"),Op("Nil",[]))),Seq(Match(Var("b_0")),Seq(CallT(SVar("debug_1_0"),[Build(Anno(Str("But we can rebind it once: "),Op("Nil",[])))],[]),Seq(Build(Anno(Int("3"),Op("Nil",[]))),Seq(CallT(SVar("debug_1_0"),[Build(Anno(Str("Second time it matches again, so here is where we fail: "),Op("Nil",[])))],[]),Match(Var("b_0"))))))))))))),ExtSDef("debug_1_0",[VarDec("o_13",FunType([ConstType(Sort("ATerm",[]))],ConstType(Sort("ATerm",[]))))],[]),ExtSDef("try_1_0",[VarDec("w_22",FunType([ConstType(Sort("ATerm",[]))],ConstType(Sort("ATerm",[]))))],[])])])
main = !1;?c;fail <+ try(fail;?c);!c;debug(!"c is still bound: ");!2;?c;debug(!"But we can rebind it once: ");!3;debug(!"Second time it matches again, so here is where we fail: ");?c
// TODO: pull off the overlay, apply it after the s_else branch, but only where the s_else branch left variables unbound. This is the semantics that strc and strj use.