sig
  type raw_line = { content : string; before : string; after : string; }
  type t = Pervasives.in_channel -> Reader.raw_line
  val raw_of_string :
    ?before:string -> ?after:string -> string -> Reader.raw_line
  val make :
    [ `Buf of eof:bool -> Buffer.t -> Reader.raw_line option
    | `Char of char
    | `Fixed of int * int
    | `Set of string ] -> Reader.t
  val lines : Reader.t
  val ignore_if : (string -> bool) -> Reader.t -> Reader.t
  val join_on : char -> Reader.t -> Reader.t
  val empty : string -> bool
  val blank : string -> bool
  val starts_with : string -> string -> bool
  val ends_with : string -> string -> bool
  val contains : ?regexp:bool -> string -> string -> bool
end