sig
  module type S0 =
    sig
      type container
      type elt
      val length : container -> int
      val is_empty : container -> bool
      val iter : container -> f:(elt -> unit) -> unit
      val fold : container -> init:'a -> f:('a -> elt -> 'a) -> 'a
      val exists : container -> f:(elt -> bool) -> bool
      val for_all : container -> f:(elt -> bool) -> bool
      val find : container -> f:(elt -> bool) -> elt option
      val to_list : container -> elt list
      val to_array : container -> elt array
    end
  module type S0_phantom =
    sig
      type elt
      type 'a container
      val length : 'a container -> int
      val is_empty : 'a container -> bool
      val iter : 'a container -> f:(elt -> unit) -> unit
      val fold : 'a container -> init:'b -> f:('b -> elt -> 'b) -> 'b
      val exists : 'a container -> f:(elt -> bool) -> bool
      val for_all : 'a container -> f:(elt -> bool) -> bool
      val find : 'a container -> f:(elt -> bool) -> elt option
      val to_list : 'a container -> elt list
      val to_array : 'a container -> elt array
    end
  module type S1 =
    sig
      type 'a container
      val length : 'a container -> int
      val is_empty : 'a container -> bool
      val iter : 'a container -> f:('a -> unit) -> unit
      val fold : 'a container -> init:'b -> f:('b -> 'a -> 'b) -> 'b
      val exists : 'a container -> f:('a -> bool) -> bool
      val for_all : 'a container -> f:('a -> bool) -> bool
      val find : 'a container -> f:('a -> bool) -> 'a option
      val to_list : 'a container -> 'a list
      val to_array : 'a container -> 'a array
    end
  module Check :
    functor (T : sig type 'a elt type 'a container end) ->
      functor
        (M : sig
               val length : 'a T.container -> int
               val is_empty : 'a T.container -> bool
               val iter : 'a T.container -> f:('a T.elt -> unit) -> unit
               val fold :
                 'a T.container -> init:'b -> f:('b -> 'a T.elt -> 'b) -> 'b
               val exists : 'a T.container -> f:('a T.elt -> bool) -> bool
               val for_all : 'a T.container -> f:('a T.elt -> bool) -> bool
               val find :
                 'a T.container -> f:('a T.elt -> bool) -> 'a T.elt option
               val to_list : 'a T.container -> 'a T.elt list
               val to_array : 'a T.container -> 'a T.elt array
             end) ->
        sig  end
  module Check_S0 : functor (M : S0) -> sig  end
  module Check_S0_phantom : functor (M : S0_phantom) -> sig  end
  module Check_S1 :
    functor (M : S1) ->
      functor
        (M : sig
               val length : 'a M.container -> int
               val is_empty : 'a M.container -> bool
               val iter : 'a M.container -> f:('a -> unit) -> unit
               val fold :
                 'a M.container -> init:'b -> f:('b -> 'a -> 'b) -> 'b
               val exists : 'a M.container -> f:('a -> bool) -> bool
               val for_all : 'a M.container -> f:('a -> bool) -> bool
               val find : 'a M.container -> f:('a -> bool) -> 'a option
               val to_list : 'a M.container -> 'a list
               val to_array : 'a M.container -> 'a array
             end) ->
        sig  end
end