sig
  class type ['a, 'a0] worker =
    object ('b)
      method onclick :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondblclick :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondrag :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondragend :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondragenter :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondragleave :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondragover :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondragstart :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondrop :
        ('Js.t, Dom_html.dragEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onerror :
        ('Js.t, Worker.errorEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeydown :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeypress :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeyup :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmessage :
        ('Js.t, 'a0 Worker.messageEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmousedown :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmousemove :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseout :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseover :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseup :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onscroll :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method postMessage : '-> unit Js.meth
      method terminate : unit Js.meth
    end
  and errorEvent =
    object
      method _type : Js.js_string Js.t Js.readonly_prop
      method colno : int Js.t Js.readonly_prop
      method currentTarget : Dom_html.element Js.t Js.opt Js.readonly_prop
      method error : Js.Unsafe.any -> unit Js.meth
      method filename : Js.js_string Js.t Js.readonly_prop
      method lineno : int Js.t Js.readonly_prop
      method msg : Js.js_string Js.t Js.readonly_prop
      method srcElement : Dom_html.element Js.t Js.opt Js.readonly_prop
      method target : Dom_html.element Js.t Js.opt Js.readonly_prop
    end
  and ['a] messageEvent =
    object
      method _type : Js.js_string Js.t Js.readonly_prop
      method currentTarget : Dom_html.element Js.t Js.opt Js.readonly_prop
      method data : 'Js.readonly_prop
      method srcElement : Dom_html.element Js.t Js.opt Js.readonly_prop
      method target : Dom_html.element Js.t Js.opt Js.readonly_prop
    end
  val create : string -> ('a, 'b) Worker.worker Js.t
  val import_scripts : string list -> unit
  val set_onmessage : ('-> unit) -> unit
  val post_message : '-> unit
end