sig
  type ('a, 'b) el = Atome of '| List of ('a, 'b) Ilist.t
  and ('a, 'b) t = 'a * ('a, 'b) Ilist.el list
  val cons : ('a, 'b) Ilist.el -> ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t
  val atome : '-> ('a, 'b) Ilist.el
  val list : '-> ('a, 'b) Ilist.el list -> ('a, 'b) Ilist.el
  val of_list : '-> 'b list -> ('a, 'b) Ilist.t
  val to_list : ('a, 'b) Ilist.t -> 'b list
  val hd : ('a, 'b) Ilist.t -> ('a, 'b) Ilist.el
  val tl : ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t
  val length : ('a, 'b) Ilist.t -> int
  val depth : ('a, 'b) Ilist.t -> int
  val append :
    combine:('-> '-> 'a) ->
    ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t
  val flatten : ?depth:int -> ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t
  val rev : ('a, 'b) Ilist.t -> ('a, 'b) Ilist.t
  val mem : '-> ('a, 'b) Ilist.t -> bool
  val exists : ('-> '-> bool) -> ('a, 'b) Ilist.t -> bool
  val map :
    ('-> 'c) ->
    (bool -> '-> '-> 'd) -> ('a, 'b) Ilist.t -> ('c, 'd) Ilist.t
  val iter : (bool -> '-> '-> unit) -> ('a, 'b) Ilist.t -> unit
  val fold_left :
    ('-> bool -> '-> '-> 'c) -> '-> ('a, 'b) Ilist.t -> 'c
  val fold_right :
    (bool -> '-> '-> '-> 'c) -> ('a, 'b) Ilist.t -> '-> 'c
  val print :
    ?first:(unit, Format.formatter, unit) Pervasives.format ->
    ?sep:(unit, Format.formatter, unit) Pervasives.format ->
    ?last:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstexp:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastexp:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b) Ilist.t -> unit
end