An OCaml port of Lionel Parreaux’s simple-sub type inference implementation.
% dune exec main examples/ss.ml val id : 'a -> 'a val twice : ('a ∨ 'b -> 'a) -> 'b -> 'a val object1 : {x: int; y: 'a -> 'a} val object2 : {x: int; y: bool} val pick_an_object : bool -> {x: int; y: bool ∨ ('a -> 'a)} val produce : int -> {head: int; tail: 'a} as 'a val consume : {head: int; tail: 'a} as 'a -> int