sig
  module type Level =
    sig
      val level : unit -> int
      val set_level : int -> unit
      val incr_level : unit -> unit
      val decr_level : unit -> unit
    end
  module FLevel : functor (C : sig  end-> Level
  module type Media =
    sig
      type media
      val media : unit -> Sdebug.Media.media
      val set_media : Sdebug.Media.media -> unit
      val output : int -> string -> unit
    end
  module type Out_channel_media =
    sig
      type media = out_channel
      val media : unit -> media
      val set_media : media -> unit
      val output : int -> string -> unit
    end
  module FOut_channel_media : functor (C : sig  end-> Out_channel_media
  module type Log =
    sig
      val level : unit -> int
      val set_level : int -> unit
      val incr_level : unit -> unit
      val decr_level : unit -> unit
      type media
      val media : unit -> media
      val set_media : media -> unit
      val output : int -> string -> unit
      val print : ?level:int -> string -> unit
    end
  module FLog : functor (L : Level-> functor (M : Media-> Log
  module Debug_stderr : Log
  module Verbose_stdout : Log
  module type Color_media =
    sig
      type media
      val media : unit -> media
      val set_media : media -> unit
      val output : int -> string -> unit
      type color
      val set_colors : (int * Sdebug.Color_media.color) list -> unit
    end
  type terminal_color = Blue | Cyan | Green | Magenta | Red | Yellow
  module FOut_channel_media_color :
    functor (L : Level->
      functor (M : Out_channel_media->
        sig
          type color = Sdebug.terminal_color
          val set_colors :
            (int * Sdebug.FOut_channel_media_color.color) list -> unit
          type media = out_channel
          val media : unit -> media
          val set_media : media -> unit
          val output : int -> string -> unit
        end
  module type Log_color =
    sig
      val level : unit -> int
      val set_level : int -> unit
      val incr_level : unit -> unit
      val decr_level : unit -> unit
      type media
      val media : unit -> media
      val set_media : media -> unit
      val output : int -> string -> unit
      type color
      val set_colors : (int * color) list -> unit
      val print : ?level:int -> string -> unit
    end
  module FLog_color :
    functor (L : Level-> functor (M : Color_media-> Log_color
  module Debug_stderr_color : Log_color
  class type ['a] media =
    object
      method media : 'a
      method output : string -> unit
      method set_media : '-> unit
    end
  class ['a] log :
    'Sdebug.media ->
    object
      method level : int
      method media : 'Sdebug.media
      method print : ?level:int -> string -> unit
      method set_level : int -> unit
    end
  class out_channel_media :
    Pervasives.out_channel -> [Pervasives.out_channel] media
  val stderr : unit -> Sdebug.out_channel_media
  val stdout : unit -> Sdebug.out_channel_media
  val verbose : Pervasives.out_channel Sdebug.log
  val debug : Pervasives.out_channel Sdebug.log
  class type ['a, 'color] color_media =
    object
      method media : 'a
      method output : string -> unit
      method set_color : 'color -> unit
      method set_media : '-> unit
    end
  class ['a, 'color] color_log :
    ('a, 'color) Sdebug.color_media ->
    object
      method level : int
      method media : 'a media
      method print : ?level:int -> string -> unit
      method set_colors : (int * 'color) list -> unit
      method set_level : int -> unit
    end
  class color_out_channel_media :
    Pervasives.out_channel ->
    [Pervasives.out_channel, Sdebug.terminal_color] color_media
  val color_stderr : unit -> Sdebug.color_out_channel_media
  val color_stdout : unit -> Sdebug.color_out_channel_media
  val color_verbose :
    (Pervasives.out_channel, Sdebug.terminal_color) Sdebug.color_log
  val color_debug :
    (Pervasives.out_channel, Sdebug.terminal_color) Sdebug.color_log
end