let rec check_term m t =
  if m < 0 then raise Huge ;
  match t with
    | Tconst _ | Tvar _ | Tdata _ -> pred m
    | Tapp(_,ts) -> List.fold_left check_term (pred m) ts
    | Tif(a,b,c) -> check_term (check_term (check_term (pred m) a) b) c
    | Tlet(_,a,b) -> check_term (check_term (pred m) a) b