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