Module Types.Separability

see Typedecl_separability for an explanation of separability and separability modes.

type t =
  1. | Ind
  2. | Sep
  3. | Deepsep
;
let eq: t => t => bool;
let print: Stdlib.Format.formatter => t => unit;
let rank: t => int;

Modes are ordered from the least to the most demanding: Ind < Sep < Deepsep. 'rank' maps them to integers in an order-respecting way: m1 < m2 <=> rank m1 < rank m2

let compare: t => t => int;

Compare two mode according to their mode ordering.

let max: t => t => t;

max_mode m1 m2 returns the most demanding mode. It is used to express the conjunction of two parameter mode constraints.

type signature = list(t);

The 'separability signature' of a type assigns a mode for each of its parameters. ('a, 'b) t has mode (m1, m2) if (t1, t2) t is separable whenever t1, t2 have mode m1, m2.

let print_signature: Stdlib.Format.formatter => signature => unit;
let default_signature: arity:int => signature;

The most pessimistic separability for a completely unknown type.