type item = | Line of int * int| Circle of int * int
type constr = | Horizontal of int| Vertical of int| Parallel of int * int| Perpendicular of int * int| Equal of int * int| On_line of int * int| On_circle of int * int
type instance = {master : int;at : pos;size : float;angle : float;
}type sheet = {points : (int * pos) list;fixed : int list;items : (int * item) list;constraints : constr list;instances : instance list;next : int;
}val ends : sheet -> int -> (int * int) optionval merge : drop:int -> onto:int -> sheet -> sheetval set_sheet : int -> sheet -> t -> tval uses : t -> int -> int -> booltype stroke = | Seg of pos * pos| Round of pos * float
val strokes : t -> int -> stroke listtype aim = | Nothing| At_point of int| On_item of int * pos| At_instance of int
val aim : t -> int -> tolerance:float -> ?except:int -> pos -> aim