sig
  type +'a t
  val nil : 'a Cf_deque.t
  val empty : 'a Cf_deque.t -> bool
  module type Direction_T =
    sig
      val push : 'a -> 'a Cf_deque.t -> 'a Cf_deque.t
      val pop : 'a Cf_deque.t -> ('a * 'a Cf_deque.t) option
      val head : 'a Cf_deque.t -> 'a
      val tail : 'a Cf_deque.t -> 'a Cf_deque.t
      val fold : ('a -> 'b -> 'a) -> 'a -> 'b Cf_deque.t -> 'a
      val of_list : 'a list -> 'a Cf_deque.t
      val of_seq : 'a Cf_seq.t -> 'a Cf_deque.t
      val to_list : 'a Cf_deque.t -> 'a list
      val to_seq : 'a Cf_deque.t -> 'a Cf_seq.t
      val to_seq2 : 'a Cf_deque.t -> ('a * 'a Cf_deque.t) Cf_seq.t
    end
  module A : Direction_T
  module B : Direction_T
  val iterate : ('a -> unit) -> 'a Cf_deque.t -> unit
  val predicate : ('a -> bool) -> 'a Cf_deque.t -> bool
  val filter : ('a -> bool) -> 'a Cf_deque.t -> 'a Cf_deque.t
  val map : ('a -> 'b) -> 'a Cf_deque.t -> 'b Cf_deque.t
  val optmap : ('a -> 'b option) -> 'a Cf_deque.t -> 'b Cf_deque.t
  val listmap : ('a -> 'b list) -> 'a Cf_deque.t -> 'b Cf_deque.t
  val seqmap : ('a -> 'b Cf_seq.t) -> 'a Cf_deque.t -> 'b Cf_deque.t
  val partition :
    ('a -> bool) -> 'a Cf_deque.t -> 'a Cf_deque.t * 'a Cf_deque.t
  val length : 'a Cf_deque.t -> int
  val catenate : 'a Cf_deque.t -> 'a Cf_deque.t -> 'a Cf_deque.t
end