anchor.diff:              "onunload" =@ f
               "onvolumechange" =@ f
               "onwaiting" =@ f
  +        ]
  +
  +module WebWorkers =
  +
  +    let WorkerType =
  +        Pattern.EnumStrings "WorkerType" ["classic"; "module"]
  +
  +    let WorkerOptions =
  +        Pattern.Config "WorkerOptions" {
  +            Required = []
  +            Optional =
  +                [
  +                    "type", WorkerType.Type
  +                    "credentials", T<string>
  +                    "name", T<string>
  +                ]
  +        }
  +
  +    let WorkerNavigator =
  +        Class "WorkerNavigator"
  +        |+> Instance [
  +            "hardwareConcurrency" =? T<int>
  +            "language" =? T<string>
  +            "languages" =? Type.ArrayOf T<string>
  +            "onLine" =? T<bool>
  +            "userAgent" =? T<string>
  +        ]
  +
  +    let WorkerUtils =
  +        Class "WorkerUtils"
  +        |+> Static [
  +            "importScripts" => (!+ T<string>) ^-> T<unit>
  +            "navigator" =? WorkerNavigator
  +        ]
  +
  +    let WorkerLocation =
  +        Class "WorkerLocation"
  +        |+> Instance [
  +            "href" =? T<string>
  +            "protocol" =? T<string>
  +            "host" =? T<string>
  +            "hostname" =? T<string>
  +            "origin" =? T<string>
  +            "port" =? T<string>
  +            "pathname" =? T<string>
  +            "search" =? T<string>
  +            "hash" =? T<string>
  +        ]
  +
  +    let WorkerGlobalScope = 
  +        Class "WorkerGlobalScope"
  +        |=> Inherits General.WindowOrWorkerGlobalScope
  +        |+> Instance [
  +            "navigator" =? WorkerNavigator
  +            "self" =? TSelf
  +            "location" =? WorkerLocation
  +            "onerror" =? General.ErrorEvent ^-> T<unit>
  +            "onoffline" =? Dom.Interfaces.Event ^-> T<unit>
  +            "ononline" =? Dom.Interfaces.Event ^-> T<unit>
  +            "onlanguagechange" =? Dom.Interfaces.Event ^-> T<unit>
  +            "importScripts" => !+T<string> ^-> T<unit>
  +        ]
  +
  +    let DedicatedWorkerGlobalScope =
  +        Class "DedicatedWorkerGlobalScope"
  +        |=> Inherits WorkerGlobalScope
  +        |+> Instance [
  +            "onmessage" =@ General.MessageEvent ^-> T<unit>
  +            "onmessageerror" =@ General.MessageEvent ^-> T<unit>
  +            "close" => T<unit> ^-> T<unit>
  +            "postMessage" => !?T<obj>?message * !?T<obj[]>?transferList ^-> T<unit>
  +        ]
  +
  +    let SharedWorkerGlobalScope =
  +        Class "SharedWorkerGlobalScope"
  +        |=> Inherits WorkerGlobalScope
  +        |+> Instance [
  +            "name" =? T<string>
  +            "applicationCache" =? AppCache.ApplicationCache
  +            "onconnect" =@ Dom.Interfaces.Event ^-> T<unit>
  +            "close" => T<unit> ^-> T<unit>
  +        ]
  +
  +    let AbstractWorker =
  +        Interface "AbstractWorker"
  +        |+> [
  +            "onerror" =@ General.ErrorEvent ^-> T<unit>
  +        ]
  +
  +    let Worker =
  +        Class "Worker"
  +        |=> Inherits Dom.Interfaces.EventTarget
  +        |=> Implements [AbstractWorker]
  +        |+> Static [
  +            Constructor (T<string>?url * !?WorkerOptions)
  +        ]
  +        |+> Instance [
  +            "onmessage" =@ General.MessageEvent ^-> T<unit>
  +            "onmessageerror" =@ General.MessageEvent ^-> T<unit>
  +            "postMessage" => !?T<obj>?message * !?T<obj[]>?transferList ^-> T<unit>
  +            "terminate" => T<unit> ^-> T<unit>
  +        ]
  +
  +    let SharedWorker =
  +        Class "SharedWorker"
  +        |=> Inherits Dom.Interfaces.EventTarget
  +        |=> Implements [AbstractWorker]
  +        |+> Static [
  +            Constructor (T<string>?url * !?WorkerOptions)
  +        ]
  +        |+> Instance [
  +            "port" =? General.MessagePort
           ]
   
   module WebGL =
  
positive.code:                 WebSockets.ReadyState
                  WebStorage.Storage
                  WebStorage.StorageEvent
              ]
              Namespace "WebSharper.JavaScript.Geolocation" [
                  Geolocation.Coordinates
  
negative.code:     let WindowProxyType = Class "Window"
      let MessagePortType = Class "MessagePort"
  
      let ErrorEvent =
          Class "ErrorEvent"
          |=> Inherits Dom.Interfaces.Event
          |+> Instance [
              "message" =? T<string>
              "filename" =? T<string>
              "lineno" =? T<int>
              "colno" =? T<int>
              "error" =? T<obj>
          ]
  
      let MessageEvent =
          Class "MessageEvent"
          |=> Inherits Dom.Interfaces.Event
          |+> Static [
              Constructor (T<string> * !?T<obj>)
          ]
  