sig
  type loc = [ `Loc of string * int | `Unknown ]
  val pp_loc : Format.formatter -> Lit.Prog.loc -> unit
  type insert
  val insert : ?loc:Lit.Prog.loc -> string -> Lit.Prog.insert
  type lang = [ `GLSL of int | `GLSL_ES of int ]
  type shader_stage =
      [ `Compute
      | `Fragment
      | `Geometry
      | `Tess_control
      | `Tess_evaluation
      | `Vertex ]
  val pp_shader_stage : Format.formatter -> Lit.Prog.shader_stage -> unit
  type shader
  val shader :
    ?lang:Lit.Prog.lang ->
    ?loc:Lit.Prog.loc ->
    ?inserts:Lit.Prog.insert list ->
    Lit.Prog.shader_stage -> string -> Lit.Prog.shader
  val stage : Lit.Prog.shader -> Lit.Prog.shader_stage
  val loc : Lit.Prog.shader -> Lit.Prog.loc
  val lang : Lit.Prog.shader -> Lit.Prog.lang option
  type source = string * (int * string) list
  val source : ?lang:Lit.Prog.lang -> Lit.Prog.shader -> Lit.Prog.source
  type t = Lit.prog
  val create :
    ?name:string -> ?uset:Lit.Uniform.set -> Lit.Prog.shader list -> Lit.prog
  val name : Lit.prog -> string
  val uniforms : Lit.prog -> Lit.Uniform.set
  val shaders : Lit.prog -> Lit.Prog.shader list
end