sig
  type 'a t = 'a list
  val length : 'Js_list.t -> int
  val cons : '-> 'Js_list.t -> 'Js_list.t
  val isEmpty : 'Js_list.t -> bool
  val hd : 'Js_list.t -> 'a option
  val tl : 'Js_list.t -> 'Js_list.t option
  val nth : 'Js_list.t -> int -> 'a option
  val revAppend : 'Js_list.t -> 'Js_list.t -> 'Js_list.t
  val rev : 'Js_list.t -> 'Js_list.t
  val mapRev :
    ([ `Arity_1 of 'a ], 'b) Js.Internal.fn -> 'Js_list.t -> 'Js_list.t
  val map :
    ([ `Arity_1 of 'a ], 'b) Js.Internal.fn -> 'Js_list.t -> 'Js_list.t
  val iter :
    ([ `Arity_1 of 'a ], unit) Js.Internal.fn -> 'Js_list.t -> unit
  val iteri :
    ([ `Arity_2 of int * 'a ], unit) Js.Internal.fn -> 'Js_list.t -> unit
  val foldLeft :
    ([ `Arity_2 of 'a * 'b ], 'a) Js.Internal.fn -> '-> 'b list -> 'a
  val foldRight :
    ([ `Arity_2 of 'a * 'b ], 'b) Js.Internal.fn -> 'a list -> '-> 'b
  val flatten : 'Js_list.t Js_list.t -> 'Js_list.t
  val filter :
    ([ `Arity_1 of 'a ], bool) Js.Internal.fn -> 'Js_list.t -> 'Js_list.t
  val filterMap :
    ([ `Arity_1 of 'a ], 'b option) Js.Internal.fn ->
    'Js_list.t -> 'Js_list.t
  val countBy : ([ `Arity_1 of 'a ], bool) Js.Internal.fn -> 'a list -> int
  val init : int -> ([ `Arity_1 of int ], 'a) Js.Internal.fn -> 'Js_list.t
  val equal :
    ([ `Arity_2 of 'a * 'a ], bool) Js.Internal.fn ->
    'a list -> 'a list -> bool
end