sig
  module Clock :
    sig
      type t
      val realtime : Linux_ext.Timerfd.Clock.t
      val monotonic : Linux_ext.Timerfd.Clock.t
      val t_of_sexp : Sexplib.Sexp.t -> Linux_ext.Timerfd.Clock.t
      val sexp_of_t : Linux_ext.Timerfd.Clock.t -> Sexplib.Sexp.t
      val compare :
        Linux_ext.Timerfd.Clock.t -> Linux_ext.Timerfd.Clock.t -> int
      val bin_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Type_class.t
      val bin_read_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Read.reader
      val __bin_read_t__ :
        (int -> Linux_ext.Timerfd.Clock.t)
        Core_kernel.Std.Bin_prot.Read.reader
      val bin_reader_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Type_class.reader
      val bin_size_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Size.sizer
      val bin_write_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Write.writer
      val bin_writer_t :
        Linux_ext.Timerfd.Clock.t Core_kernel.Std.Bin_prot.Type_class.writer
    end
  module Flags :
    sig
      type t
      val of_int : int -> t
      val to_int_exn : t -> int
      val equal : t -> t -> bool
      val empty : t
      val ( + ) : t -> t -> t
      val ( - ) : t -> t -> t
      val intersect : t -> t -> t
      val complement : t -> t
      val is_empty : t -> bool
      val do_intersect : t -> t -> bool
      val are_disjoint : t -> t -> bool
      val nonblock : Linux_ext.Timerfd.Flags.t
      val cloexec : Linux_ext.Timerfd.Flags.t
      val sexp_of_t : Linux_ext.Timerfd.Flags.t -> Sexplib.Sexp.t
    end
  type t = private Unix.File_descr.t
  val create :
    (?flags:Linux_ext.Timerfd.Flags.t ->
     Linux_ext.Timerfd.Clock.t -> Linux_ext.Timerfd.t)
    Core_kernel.Std.Or_error.t
  val set :
    Linux_ext.Timerfd.t -> [ `After of Span.t | `At of Time.t ] -> unit
  val set_repeating :
    ?initial:[ `After of Span.t | `At of Time.t ] ->
    Linux_ext.Timerfd.t -> Span.t -> unit
  val clear : Linux_ext.Timerfd.t -> unit
  type repeat = { fire_after : Span.t; interval : Span.t; }
  val get :
    Linux_ext.Timerfd.t ->
    [ `Fire_after of Span.t
    | `Not_armed
    | `Repeat of Linux_ext.Timerfd.repeat ]
  val t_of_sexp : Sexplib.Sexp.t -> Linux_ext.Timerfd.t
  val sexp_of_t : Linux_ext.Timerfd.t -> Sexplib.Sexp.t
  val compare : Linux_ext.Timerfd.t -> Linux_ext.Timerfd.t -> int
  val bin_t : Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Type_class.t
  val bin_read_t : Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Read.reader
  val __bin_read_t__ :
    (int -> Linux_ext.Timerfd.t) Core_kernel.Std.Bin_prot.Read.reader
  val bin_reader_t :
    Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Type_class.reader
  val bin_size_t : Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Size.sizer
  val bin_write_t : Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Write.writer
  val bin_writer_t :
    Linux_ext.Timerfd.t Core_kernel.Std.Bin_prot.Type_class.writer
end