sig
  type 'a t
  val to_list : 'a Dlist.t -> 'a list
  val of_list : 'a list -> 'a Dlist.t
  val of_dlist : 'a Dlist.t -> 'a Dlist.t
  val empty : unit -> 'a Dlist.t
  val append : 'a Dlist.t -> 'a Dlist.t -> 'a Dlist.t
  val concat : 'a Dlist.t list -> 'a Dlist.t
  val length : 'a Dlist.t -> int
  val rev : 'a Dlist.t -> 'a Dlist.t
  val hd : 'a Dlist.t -> 'a option
  val hd_exn : 'a Dlist.t -> 'a
  val tl : 'a Dlist.t -> 'a Dlist.t option
  val tl_exn : 'a Dlist.t -> 'a Dlist.t
  val nth : 'a Dlist.t -> int -> 'a option
  val nth_exn : 'a Dlist.t -> int -> 'a
  val fold : 'a Dlist.t -> init:'acc -> f:('acc -> 'a -> 'acc) -> 'acc
  val fold_left : 'a Dlist.t -> init:'acc -> f:('acc -> 'a -> 'acc) -> 'acc
  val fold_right : 'a Dlist.t -> init:'acc -> f:('a -> 'acc -> 'acc) -> 'acc
  val foldi :
    'a Dlist.t -> init:'acc -> f:(int -> 'acc -> 'a -> 'acc) -> 'acc
  val map : 'a Dlist.t -> f:('a -> 'b) -> 'b Dlist.t
  val mapi : 'a Dlist.t -> f:(int -> 'a -> 'b) -> 'b Dlist.t
  val map2 : 'a Dlist.t -> 'b Dlist.t -> f:('a -> 'b -> 'c) -> 'c Dlist.t
  val iter : 'a Dlist.t -> f:('a -> unit) -> unit
  val iteri : 'a Dlist.t -> f:(int -> 'a -> unit) -> unit
end