sig
  exception Empty
  exception OutOfBounds
  type 'a t
  and 'a cons
  val deref : 'a Dllist.cons -> 'a
  val create : unit -> 'a Dllist.t
  val first : 'a Dllist.t -> 'a Dllist.cons
  val last : 'a Dllist.t -> 'a Dllist.cons
  val next : 'a Dllist.cons -> 'a Dllist.cons
  val prev : 'a Dllist.cons -> 'a Dllist.cons
  val insert_end : 'a -> 'a Dllist.t -> 'a Dllist.cons
  val insert_before : 'a -> 'a Dllist.cons -> 'a Dllist.cons
  exception Cons_already_free
  val remove : 'a Dllist.cons -> unit
  val count : 'a Dllist.t -> int
  val to_list : 'a Dllist.t -> 'a Dllist.cons list
  val iter : ('a -> unit) -> 'a Dllist.t -> unit
end