type v3 = float * float * floattype shape = | Cube| Sphere| Cylinder| Cone| Torus of float| Ground
type look = | Plain| Checker| Marble| Wood
type material = {color : int;look : look;mirror : float;glass : bool;
}type kind = | Mesh of shape * material| Point_light of int| Sun_light of int| Camera
type boolean = | Difference| Union| Intersect
type obj = {name : string;kind : kind;location : v3;rotation : v3;scale : v3;hidden : bool;modifier : (boolean * string) option;
}val fresh_name : string -> t -> stringval add : kind -> string -> t -> t * stringval find : t -> string -> obj optionval update : string -> (obj -> obj) -> t -> tval remove : string list -> t -> tval duplicate : string list -> t -> t * string listval is_cutter : t -> string -> boolval rotate_point : int -> float -> v3 -> v3val turn : int -> float -> obj -> objval wires : ?target:v3 -> obj -> (v3 * v3) list