let tau_of_object_array obj n = 
    let rec apply_dim t n =
      (*[LC] not perfect, but works *)
      if n > 0 then ADT("farray",[apply_dim t (pred n)])
      else t
    in apply_dim (tau_of_object obj) n