package inferno

  1. Overview
  2. Docs

Parameters

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

Signature

type variable
type 'a co
val pure : 'a -> 'a co
val (^&) : 'a co -> 'b co -> ('a * 'b) co
val map : ('a -> 'b) -> 'a co -> 'b co
val let+ : 'a co -> ('a -> 'b) -> 'b co
val and+ : 'a co -> 'b co -> ('a * 'b) co
val (<$$>) : 'a co -> ('a -> 'b) -> 'b co
val (^^) : 'a co -> 'b co -> 'b co
val (--) : variable -> variable -> unit co
val (---) : variable -> variable O.structure -> unit co
type ('a, 'r) binder = ('a -> 'r co) -> 'r co
val let@ : ('a, 'r) binder -> ('a -> 'r co) -> 'r co
val exist : (variable, 'r) binder
val construct : variable O.structure -> (variable, 'r) binder
val witness : variable -> O.ty co
type deep_ty =
  1. | DeepVar of variable
  2. | DeepStructure of deep_ty S.structure
val build : deep_ty -> (variable, 'r) binder
val lift : ('a -> variable -> 'b co) -> 'a -> variable O.structure -> 'b co
val instance : X.tevar -> variable -> O.ty list co
val instance_ : X.tevar -> variable -> unit co
val def : X.tevar -> variable -> 'a co -> 'a co
val let1 : X.tevar -> (variable -> 'a co) -> 'b co -> (O.scheme * O.tyvar list * 'a * 'b) co
val let0 : 'a co -> (O.tyvar list * 'a) co
val letn : X.tevar list -> (variable list -> 'a co) -> 'b co -> (O.scheme list * O.tyvar list * 'a * 'b) co
type range = Stdlib.Lexing.position * Stdlib.Lexing.position
val correlate : range -> 'a co -> 'a co
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 co -> 'a