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