Module Ast.Ty

type t =
| Prop
| App of Sidekick_base_term.ID.t * t list
| Arrow of t * t
val prop : t
val const : Sidekick_base_term.ID.t -> t
val app : Sidekick_base_term.ID.t -> t list -> t
val arrow : t -> t -> t
val arrow_l : t list -> t -> t
val rat : t
val int : t
include Sidekick_util.Intf.EQ with type t := t
type t
val equal : t -> t -> bool
include Sidekick_util.Intf.ORD with type t := t
type t
val compare : t -> t -> int
include Sidekick_util.Intf.HASH with type t := t
type t
val hash : t -> int
include Sidekick_util.Intf.PRINT with type t := t
type t
val pp : t CCFormat.printer
val unfold : t -> t list * t

unfold ty will get the list of arguments, and the return type of any function. An atomic type is just a function with no arguments

Datatypes

type data = {
data_id : Sidekick_base_term.ID.t;
data_cstors : t Sidekick_base_term.ID.Map.t;
}

Mutually recursive datatypes

module Map : CCMap.S with type Map.key = t

Error Handling

val ill_typed : ('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a