let rec fold_data_in_exp do_var do_data acc exp =
let frec = fold_data_in_exp do_var do_data in
match exp with
| Tconst _ -> acc
| Tvar v -> do_var acc v
| Tdata d -> do_data acc d
| Tapp (_n,tl) -> List.fold_left frec acc tl
| Tif (t1,t2,t3) -> frec (frec (frec acc t1) t2) t3