diff --git a/src/Web/HTML/HTMLAudioElement.js b/src/Web/HTML/HTMLAudioElement.js
new file mode 100644
index 0000000..cded82b
--- /dev/null
+++ b/src/Web/HTML/HTMLAudioElement.js
@@ -0,0 +1,14 @@
+/* global Audio */
+"use strict";
+
+exports.create = function () {
+ return function () {
+ return new Audio();
+ };
+};
+
+exports.createWithURL = function (url) {
+ return function () {
+ return new Audio(url);
+ };
+};
diff --git a/src/Web/HTML/HTMLAudioElement.purs b/src/Web/HTML/HTMLAudioElement.purs
index 18b6c6d..536e1de 100644
--- a/src/Web/HTML/HTMLAudioElement.purs
+++ b/src/Web/HTML/HTMLAudioElement.purs
@@ -1,6 +1,27 @@
-module Web.HTML.HTMLAudioElement where
+module Web.HTML.HTMLAudioElement
+ ( HTMLAudioElement
+ , fromHTMLElement
+ , fromElement
+ , fromNode
+ , fromChildNode
+ , fromNonDocumentTypeChildNode
+ , fromParentNode
+ , fromEventTarget
+ , toHTMLMediaElement
+ , toHTMLElement
+ , toElement
+ , toNode
+ , toChildNode
+ , toNonDocumentTypeChildNode
+ , toParentNode
+ , toEventTarget
+ , create
+ , create'
+ ) where
import Data.Maybe (Maybe)
+import Effect (Effect)
+import Prelude (Unit)
import Unsafe.Coerce (unsafeCoerce)
import Web.DOM (ChildNode, Element, Node, NonDocumentTypeChildNode, ParentNode)
import Web.Event.EventTarget (EventTarget)
@@ -57,3 +78,9 @@ toParentNode = unsafeCoerce
toEventTarget :: HTMLAudioElement -> EventTarget
toEventTarget = unsafeCoerce
+
+foreign import create :: Unit -> Effect HTMLAudioElement
+foreign import createWithURL :: String -> Effect HTMLAudioElement
+
+create' :: String -> Effect HTMLAudioElement
+create' = createWithURL