diff --git a/jsaddle.cabal b/jsaddle.cabal
--- a/jsaddle.cabal
+++ b/jsaddle.cabal
@@ -1,5 +1,5 @@
 name: jsaddle
-version: 0.4.0.3
+version: 0.4.0.4
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -31,6 +31,8 @@
             gi-webkit >=3.0.2 && <3.1,
             gi-javascriptcore >=3.0.2 && <3.1,
             webkitgtk3-javascriptcore >=0.14.0.0 && <0.15
+        exposed-modules:
+            Language.Javascript.JSaddle.Test
     exposed-modules:
         Language.Javascript.JSaddle
         Language.Javascript.JSaddle.Arguments
@@ -44,7 +46,6 @@
         Language.Javascript.JSaddle.String
         Language.Javascript.JSaddle.Value
         Language.Javascript.JSaddle.Types
-        Language.Javascript.JSaddle.Test
     build-depends:
         template-haskell -any,
         base <5,
diff --git a/src/Language/Javascript/JSaddle/Monad.hs b/src/Language/Javascript/JSaddle/Monad.hs
--- a/src/Language/Javascript/JSaddle/Monad.hs
+++ b/src/Language/Javascript/JSaddle/Monad.hs
@@ -48,13 +48,14 @@
        (webFrameGetGlobalContext)
 import GI.GLib (idleAdd)
 import GI.GLib.Constants(pattern PRIORITY_DEFAULT)
-#endif
-import qualified Control.Exception as E (Exception, catch, bracket)
-import Control.Concurrent.MVar (takeMVar, putMVar, newEmptyMVar)
 import Foreign.Ptr (castPtr)
 import GI.JavaScriptCore.Structs.GlobalContext (GlobalContext(..))
 import Foreign.ForeignPtr (withForeignPtr)
+#endif
+import qualified Control.Exception as E (Exception, catch, bracket)
+import Control.Concurrent.MVar (takeMVar, putMVar, newEmptyMVar)
 
+#ifndef ghcjs_HOST_OS
 -- | Post an action to be run in the main GUI thread.
 --
 -- The current thread blocks until the action completes and the result is
@@ -75,6 +76,7 @@
 postGUIAsync action = do
   idleAdd PRIORITY_DEFAULT $ action >> return False
   return ()
+#endif
 
 -- | Wrapped version of 'E.catch' that runs in a MonadIO that works
 --   a bit better with 'JSM'
