sig
  type t
  type angle_unit = Degrees | Radians
  external init : v:float -> u:CL_Angle.angle_unit -> CL_Angle.t
    = "caml_CL_Angle_init"
  external delete : CL_Angle.t -> unit = "caml_CL_Angle_delete"
  external to_degrees : CL_Angle.t -> float = "caml_CL_Angle_to_degrees"
  external to_radians : CL_Angle.t -> float = "caml_CL_Angle_to_radians"
  external set_degrees : CL_Angle.t -> degrees:float -> unit
    = "caml_CL_Angle_set_degrees"
  external set_radians : CL_Angle.t -> radians:float -> unit
    = "caml_CL_Angle_set_radians"
  external normalize : CL_Angle.t -> unit = "normalize"
  external normalize_180 : CL_Angle.t -> unit = "normalize_180"
  external add : CL_Angle.t -> CL_Angle.t -> CL_Angle.t = "caml_CL_Angle_add"
  external sub : CL_Angle.t -> CL_Angle.t -> CL_Angle.t = "caml_CL_Angle_sub"
  external mul : CL_Angle.t -> float -> CL_Angle.t = "caml_CL_Angle_mul"
  external div : CL_Angle.t -> float -> CL_Angle.t = "caml_CL_Angle_div"
  external eq : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_eq"
  external gt : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_gt"
  external lt : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_lt"
  module Infix :
    sig
      external ( + ) : CL_Angle.t -> CL_Angle.t -> CL_Angle.t
        = "caml_CL_Angle_add"
      external ( - ) : CL_Angle.t -> CL_Angle.t -> CL_Angle.t
        = "caml_CL_Angle_sub"
      external ( * ) : CL_Angle.t -> float -> CL_Angle.t
        = "caml_CL_Angle_mul"
      external ( / ) : CL_Angle.t -> float -> CL_Angle.t
        = "caml_CL_Angle_div"
      external ( = ) : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_eq"
      external ( > ) : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_gt"
      external ( < ) : CL_Angle.t -> CL_Angle.t -> bool = "caml_CL_Angle_lt"
    end
end