type point =
    {x : int; getx : point -> int; setx : point -> int -> point };;
let point x0 =
  { x = x0;
    getx = (fun self -> self.x);
    setx = (fun self y -> {self with x = y});
  } ;;