package inferno

  1. Overview
  2. Docs

Parameters

module O : SolverSig.OUTPUT with type 'a structure = 'a S.structure

Signature

type range = Stdlib.Lexing.position * Stdlib.Lexing.position
type variable
val fresh : unit -> variable
type _ rawco =
  1. | CRange : range * 'a rawco -> 'a rawco
  2. | CTrue : unit rawco
  3. | CConj : 'a rawco * 'b rawco -> ('a * 'b) rawco
  4. | CEq : variable * variable -> unit rawco
  5. | CExist : variable * variable O.structure option * 'a rawco -> 'a rawco
  6. | CWitness : variable -> O.ty rawco
  7. | CInstance : X.tevar * variable -> O.ty list rawco
  8. | CDef : X.tevar * variable * 'a rawco -> 'a rawco
  9. | CLet : (X.tevar * variable) list * 'a rawco * 'b rawco -> (O.tyvar list * (X.tevar * O.scheme) list * 'a * 'b) rawco
  10. | CMap : 'a rawco * ('a -> 'b) -> 'b rawco
val print_rawco : Stdlib.Format.formatter -> _ rawco -> unit
exception Unbound of range * X.tevar
exception Unify of range * O.ty * O.ty
exception Cycle of range * O.ty
val solve : rectypes:bool -> 'a rawco -> 'a