sig
  val infinity : Tsdl.Sdl.uint32
  type feature = int
  val gain : Tsdl.Sdl.Haptic.feature
  val autocenter : Tsdl.Sdl.Haptic.feature
  val status : Tsdl.Sdl.Haptic.feature
  val pause : Tsdl.Sdl.Haptic.feature
  type direction_type = int
  val polar : Tsdl.Sdl.Haptic.direction_type
  val cartesian : Tsdl.Sdl.Haptic.direction_type
  val spherical : Tsdl.Sdl.Haptic.direction_type
  module Direction :
    sig
      type t
      val create :
        int -> int32 -> int32 -> int32 -> Tsdl.Sdl.Haptic.Direction.t
      val typ : Tsdl.Sdl.Haptic.Direction.t -> Tsdl.Sdl.Haptic.direction_type
      val dir_0 : Tsdl.Sdl.Haptic.Direction.t -> int32
      val dir_1 : Tsdl.Sdl.Haptic.Direction.t -> int32
      val dir_2 : Tsdl.Sdl.Haptic.Direction.t -> int32
    end
  type effect_type = int
  type 'a field
  val create_effect : unit -> Tsdl.Sdl.haptic_effect
  val get : Tsdl.Sdl.haptic_effect -> 'Tsdl.Sdl.Haptic.field -> 'a
  val set : Tsdl.Sdl.haptic_effect -> 'Tsdl.Sdl.Haptic.field -> '-> unit
  val typ : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val constant : Tsdl.Sdl.Haptic.effect_type
  val constant_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val constant_direction : Tsdl.Sdl.Haptic.Direction.t Tsdl.Sdl.Haptic.field
  val constant_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val constant_delay : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_button : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_interval : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_level : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val constant_attack_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_attack_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_fade_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val constant_fade_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val sine : Tsdl.Sdl.Haptic.effect_type
  val left_right : Tsdl.Sdl.Haptic.effect_type
  val triangle : Tsdl.Sdl.Haptic.effect_type
  val sawtooth_up : Tsdl.Sdl.Haptic.effect_type
  val sawtooth_down : Tsdl.Sdl.Haptic.effect_type
  val periodic_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val periodic_direction : Tsdl.Sdl.Haptic.Direction.t Tsdl.Sdl.Haptic.field
  val periodic_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val periodic_delay : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_button : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_interval : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_period : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_magnitude : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val periodic_offset : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val periodic_phase : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_attack_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_attack_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_fade_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val periodic_fade_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val spring : Tsdl.Sdl.Haptic.effect_type
  val damper : Tsdl.Sdl.Haptic.effect_type
  val inertia : Tsdl.Sdl.Haptic.effect_type
  val friction : Tsdl.Sdl.Haptic.effect_type
  val condition_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val condition_direction : Tsdl.Sdl.Haptic.Direction.t Tsdl.Sdl.Haptic.field
  val condition_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val condition_delay : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_button : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_interval : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_right_sat_0 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_right_sat_1 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_right_sat_2 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_left_sat_0 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_left_sat_1 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_left_sat_2 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_right_coeff_0 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_right_coeff_1 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_right_coeff_2 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_left_coeff_0 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_left_coeff_1 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_left_coeff_2 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_deadband_0 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_deadband_1 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_deadband_2 : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val condition_center_0 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_center_1 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val condition_center_2 : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val ramp : Tsdl.Sdl.Haptic.effect_type
  val ramp_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val ramp_direction : Tsdl.Sdl.Haptic.Direction.t Tsdl.Sdl.Haptic.field
  val ramp_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val ramp_delay : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_button : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_interval : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_start : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val ramp_end : Tsdl.Sdl.int16 Tsdl.Sdl.Haptic.field
  val ramp_attack_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_attack_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_fade_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val ramp_fade_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val left_right_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val left_right_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val left_right_large_magnitude : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val left_right_small_magnitude : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom : Tsdl.Sdl.Haptic.effect_type
  val custom_type : Tsdl.Sdl.Haptic.effect_type Tsdl.Sdl.Haptic.field
  val custom_direction : Tsdl.Sdl.Haptic.Direction.t Tsdl.Sdl.Haptic.field
  val custom_length : Tsdl.Sdl.uint32 Tsdl.Sdl.Haptic.field
  val custom_delay : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_button : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_interval : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_channels : Tsdl.Sdl.uint8 Tsdl.Sdl.Haptic.field
  val custom_period : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_samples : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_data : Tsdl.Sdl.uint16 list Tsdl.Sdl.Haptic.field
  val custom_attack_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_attack_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_fade_length : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
  val custom_fade_level : Tsdl.Sdl.uint16 Tsdl.Sdl.Haptic.field
end