sig
  type kind = KTerm | KType | KPerm | KArrow of Kind.kind * Kind.kind
  val karrow : ('a * Kind.kind) list -> Kind.kind -> Kind.kind
  val as_arrow : Kind.kind -> Kind.kind list * Kind.kind
  val arity : Kind.kind -> int
  val print : Kind.kind -> string
  val print_kind : Kind.kind -> PPrint.document
  val equal : Kind.kind -> Kind.kind -> bool
end