diff --git a/apiary-purescript.cabal b/apiary-purescript.cabal
--- a/apiary-purescript.cabal
+++ b/apiary-purescript.cabal
@@ -1,5 +1,5 @@
 name:                apiary-purescript
-version:             0.15.2
+version:             0.16.0
 synopsis:            purescript compiler for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/pureScript.hs>
@@ -18,20 +18,20 @@
 
 library
   exposed-modules:     Web.Apiary.PureScript
-                       Web.Apiary.PureScript.Explicit
   other-modules:       Web.Apiary.PureScript.Internal
-  build-depends:       base                 >=4.6    && <4.8
+  build-depends:       base                 >=4.6  && <4.8
                      , template-haskell
-                     , apiary               >=0.15.2 && <0.16
-                     , purescript           >=0.5    && <0.6
-                     , filepath             >=1.3    && <1.4
-                     , utf8-string          >=0.3    && <0.4
-                     , text                 >=1.1    && <1.2
-                     , bytestring           >=0.10   && <0.11
-                     , unordered-containers >=0.2    && <0.3
-                     , reflection           >=1.4    && <1.6
-                     , parsec               >=3.1    && <3.2
-                     , Glob                 >=0.7    && <0.8
+                     , apiary               >=0.16 && <0.17
+                     , purescript           >=0.5  && <0.6
+
+                     , filepath             >=1.3  && <1.4
+                     , utf8-string          >=0.3  && <0.4
+                     , text                 >=1.1  && <1.2
+                     , bytestring           >=0.10 && <0.11
+                     , unordered-containers >=0.2  && <0.3
+                     , parsec               >=3.1  && <3.2
+                     , Glob                 >=0.7  && <0.8
+                     , data-default-class   >=0.0  && <0.1
 
   hs-source-dirs:      src
   ghc-options:         -O2 -Wall
diff --git a/src/Web/Apiary/PureScript.hs b/src/Web/Apiary/PureScript.hs
--- a/src/Web/Apiary/PureScript.hs
+++ b/src/Web/Apiary/PureScript.hs
@@ -4,20 +4,17 @@
 
 module Web.Apiary.PureScript
     ( I.PureScriptConfig(..)
-    , HasPureScript
-    , withPureScript
+    , initPureScript
     , pureScript
     ) where
 
 import Web.Apiary
 import qualified Web.Apiary.PureScript.Internal as I
-import Data.Reflection
-
-type HasPureScript = Given I.PureScript
+import Data.Apiary.Extension
+import Data.Apiary.Proxy
 
-withPureScript :: MonadIO m => I.PureScriptConfig
-               -> (HasPureScript => m a) -> m a
-withPureScript conf m = I.withPureScript conf $ \p -> give p m
+initPureScript :: MonadIO m => I.PureScriptConfig -> Initializer' m I.PureScript
+initPureScript conf = initializer $ I.withPureScript conf $ return 
 
-pureScript :: (MonadIO m, HasPureScript) => FilePath -> ActionT m ()
-pureScript = I.pureScript given
+pureScript :: (Has I.PureScript exts, MonadIO m) => FilePath -> ActionT exts m ()
+pureScript m = getExt (Proxy :: Proxy I.PureScript) >>= flip I.pureScript m
diff --git a/src/Web/Apiary/PureScript/Explicit.hs b/src/Web/Apiary/PureScript/Explicit.hs
deleted file mode 100644
--- a/src/Web/Apiary/PureScript/Explicit.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-module Web.Apiary.PureScript.Explicit
-    ( PureScriptConfig(..)
-    , PureScript
-    , withPureScript
-    , pureScript
-    ) where
-
-import Web.Apiary.PureScript.Internal
diff --git a/src/Web/Apiary/PureScript/Internal.hs b/src/Web/Apiary/PureScript/Internal.hs
--- a/src/Web/Apiary/PureScript/Internal.hs
+++ b/src/Web/Apiary/PureScript/Internal.hs
@@ -20,6 +20,7 @@
 
 import Web.Apiary
 
+import Data.Default.Class
 import Data.IORef
 import Data.Typeable
 import qualified Data.HashMap.Strict as H
@@ -100,7 +101,7 @@
         Left l           -> throwIO (CompileError l)
         Right (js, _, _) -> return js
 
-pureScript :: MonadIO m => PureScript -> FilePath -> ActionT m ()
+pureScript :: MonadIO m => PureScript -> FilePath -> ActionT exts m ()
 pureScript env p = do
     contentType "text/javascript"
     s <- liftIO . try $ 
