type document // abstract type for a document object type context @val external document: document = "document" @val external window: Dom.element = "window" @send external getElementById: (document, string) => Dom.element = "getElementById" @send external getContext: (Dom.element, string) => context = "getContext" @send external fillRect: (context, int, int, int, int) => unit = "fillRect" @set external fillStyle: (context, string) => unit = "fillStyle" type key_event = { keyCode: int, key: string, } @send external addKeyEventListener: (Dom.element, string, key_event => unit, bool) => unit = "addEventListener" type intervalID @val external setInterval: (unit => unit, int) => intervalID = "setInterval" type image @new external newImage: unit => image = "Image" @set external setImgSrc: (image, string) => unit = "src" @set external imgOnload: (image, unit => unit) => unit = "onload" @send external drawImage2: (context, image, int, int) => unit = "drawImage" @send external drawImage4: (context, image, int, int, int, int) => unit = "drawImage" @send external drawImage8: (context, image, int, int, int, int, int, int, int, int) => unit = "drawImage" @set external imageSmoothingEnabled: (context, bool) => unit = "imageSmoothingEnabled"