sig
  type t = { te_desc : Type_expr.te_desc; mutable te_typ : Types.typ; }
  and te_desc =
      TEBool
    | TEInt of Type_expr.int_annot
    | TEFloat
    | TEChar
    | TEEvent
    | TEName of string
    | TEArray of Type_expr.type_index_expr * Type_expr.t
  and int_annot =
      TA_none
    | TA_size of Type_expr.type_index_expr
    | TA_range of Type_expr.type_index_expr * Type_expr.type_index_expr
  and type_index_expr =
      TEConst of int
    | TEVar of string
    | TEBinop of string * Type_expr.type_index_expr *
        Type_expr.type_index_expr
  val string_of_type_index : Type_expr.type_index_expr -> string
  val string_of_int_annot : Type_expr.int_annot -> string
  val string_of_type_expr : Type_expr.t -> string
end