sig
  type 'a clist =
      CList of 'a list
    | CConsL of 'a * 'a Clist.clist
    | CConsR of 'a Clist.clist * 'a
    | CSeq of 'a Clist.clist * 'a Clist.clist
  val toList : 'a Clist.clist -> 'a list
  val fromList : 'a list -> 'a Clist.clist
  val single : 'a -> 'a Clist.clist
  val empty : 'a Clist.clist
  val append : 'a Clist.clist -> 'a Clist.clist -> 'a Clist.clist
  val checkBeforeAppend : 'a Clist.clist -> 'a Clist.clist -> bool
  val length : 'a Clist.clist -> int
  val map : ('a -> 'b) -> 'a Clist.clist -> 'b Clist.clist
  val fold_left : ('acc -> 'a -> 'acc) -> 'acc -> 'a Clist.clist -> 'acc
  val iter : ('a -> unit) -> 'a Clist.clist -> unit
  val rev : ('a -> 'a) -> 'a Clist.clist -> 'a Clist.clist
  val docCList :
    Pretty.doc -> ('a -> Pretty.doc) -> unit -> 'a Clist.clist -> Pretty.doc
end