sig
  module Bracket :
    sig
      type kind = BISECTION | FALSEPOS | BRENT
      type t
      val make :
        Gsl_root.Bracket.kind ->
        Gsl_fun.gsl_fun -> float -> float -> Gsl_root.Bracket.t
      external name : Gsl_root.Bracket.t -> string
        = "ml_gsl_root_fsolver_name"
      external iterate : Gsl_root.Bracket.t -> unit
        = "ml_gsl_root_fsolver_iterate"
      external root : Gsl_root.Bracket.t -> float
        = "ml_gsl_root_fsolver_root"
      external interval : Gsl_root.Bracket.t -> float * float
        = "ml_gsl_root_fsolver_x_interv"
    end
  module Polish :
    sig
      type kind = NEWTON | SECANT | STEFFENSON
      type t
      val make :
        Gsl_root.Polish.kind ->
        Gsl_fun.gsl_fun_fdf -> float -> Gsl_root.Polish.t
      external name : Gsl_root.Polish.t -> string
        = "ml_gsl_root_fdfsolver_name"
      external iterate : Gsl_root.Polish.t -> unit
        = "ml_gsl_root_fdfsolver_iterate"
      external root : Gsl_root.Polish.t -> float
        = "ml_gsl_root_fdfsolver_root"
    end
  external test_interval :
    lo:float -> up:float -> epsabs:float -> epsrel:float -> bool
    = "ml_gsl_root_test_interval"
  external test_delta :
    x1:float -> x0:float -> epsabs:float -> epsrel:float -> bool
    = "ml_gsl_root_test_delta"
  external test_residual : f:float -> epsabs:float -> bool
    = "ml_gsl_root_test_residual"
end