`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 : ('a -> 'b -> 'a) -> 'a -> 'b Clist.clist -> 'a
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`