(HExtlib.list_concat ~sep:[ C.Semicolon ]
(List.map (fun t -> [ C.Tactical (C.Tactic t) ]) tactics)))
+let if_ ~start ~continuation ~fail =
+ S.mk_tactic
+ (fun istatus ->
+ let xostatus =
+ try
+ let res = C.eval (C.Tactical (C.Tactic start)) istatus in
+ info (lazy ("Tacticals.if_: succedeed!!!"));
+ Some res
+ with PET.Fail _ -> None
+ in
+ match xostatus with
+ | Some ostatus ->
+ let opened,closed = S.goals ostatus in
+ begin match opened with
+ | [] -> ostatus
+ | _ ->
+ fold_eval (S.focus ~-1 ostatus)
+ [ C.Semicolon; C.Tactical (C.Tactic continuation) ]
+ end
+ | None -> C.eval (C.Tactical (C.Tactic fail)) istatus
+ )
+
(* Tacticals that cannot be implemented on top of tynycals *)
let first ~tactics =