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:             1.2.1
+version:             1.2.2
 synopsis:            purescript compiler for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/pureScript.hs>
@@ -20,9 +20,8 @@
   exposed-modules:     Web.Apiary.PureScript
   other-modules:       Web.Apiary.PureScript.Internal
   build-depends:       base                 >=4.6   && <4.8
-                     , template-haskell
                      , apiary               >=1.1   && <1.3
-                     , purescript           ==0.6.2.*
+                     , purescript           ==0.6.3.*
 
                      , filepath             >=1.3   && <1.4
                      , utf8-string          >=0.3   && <0.4
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
@@ -14,7 +14,7 @@
 import Data.Apiary.Compat(Proxy(..))
 
 initPureScript :: MonadIO m => I.PureScriptConfig -> Initializer' m I.PureScript
-initPureScript = initializer' . I.makePureScript
+initPureScript = initializer' . liftIO . I.makePureScript
 
 pureScript :: (Has I.PureScript exts, MonadIO m) => FilePath -> ActionT exts prms m ()
 pureScript m = getExt (Proxy :: Proxy I.PureScript) >>= flip I.pureScript m
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
@@ -1,6 +1,5 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE DataKinds #-}
@@ -8,11 +7,9 @@
 
 module Web.Apiary.PureScript.Internal where
 
-import System.FilePath(takeDirectory, (</>))
 import qualified System.FilePath.Glob as G
 import qualified System.IO.UTF8 as U
 
-import qualified Language.Haskell.TH as TH
 import qualified Language.PureScript as P
 
 import Control.Monad.Apiary.Action(ActionT, contentType, string, bytes)
@@ -28,30 +25,24 @@
 import qualified Data.HashMap.Strict as H
 import qualified Text.Parsec.Error as P
 
-import qualified Paths_apiary_purescript as Path
-
 data PureScriptException
     = ParseError   P.ParseError
     | CompileError String
     deriving (Show, Typeable)
 instance Exception PureScriptException
 
-purescriptDatadir :: FilePath
-purescriptDatadir = takeDirectory $(TH.stringE =<< TH.runIO Path.getDataDir) </> "purescript-" ++ VERSION_purescript
-
 defaultPatterns :: [G.Pattern]
 defaultPatterns = map G.compile 
     [ "src/**/*.purs"
     , "bower_components/purescript-*/src/**/*.purs"
-    , "bower_components/purescript-*/src/**/*.purs.hs"
     ]
 
 data PureScriptConfig = PureScriptConfig
     { libraryPatterns   :: [G.Pattern]
     , libraryBaseDir    :: FilePath
-    , preludePath       :: FilePath
     , development       :: Bool
     , initialCompiles   :: [FilePath]
+    , pureScriptPrefix  :: [String]
     , pureScriptOptions :: P.Options P.Compile
     }
 
@@ -59,11 +50,11 @@
     def = PureScriptConfig 
         defaultPatterns
         "."
-        defaultPreludePath
         False
         []
+        ["Generated by apiary-purescript. purescript version: " ++ "0.6.3"] -- TODO
         P.defaultCompileOptions
-        { P.optionsMain             = Just "Main" }
+        { P.optionsMain  = Just "Main" }
 
 data PureScript = PureScript
     { pscConfig :: PureScriptConfig
@@ -71,36 +62,21 @@
     }
 instance Extension PureScript
 
-makePureScript :: MonadIO m => PureScriptConfig -> m PureScript
+makePureScript :: PureScriptConfig -> IO PureScript
 makePureScript conf = do
-    ir <- liftIO $ mapM (\p -> (p,) <$> compile conf p) (initialCompiles conf)
-    p  <- liftIO $ PureScript conf <$> newIORef (H.fromList ir)
+    ir <- mapM (\p -> (p,) <$> compile conf p) (initialCompiles conf)
+    p  <- PureScript conf <$> newIORef (H.fromList ir)
     return p
 
-defaultPreludePath :: FilePath
-defaultPreludePath = purescriptDatadir </> "prelude/prelude.purs"
-
-readPscInput :: FilePath -> IO [P.Module]
-readPscInput p = do
-    txt <- U.readFile p
-    case P.runIndentParser p P.parseModules txt of
-        Left e  -> throwIO $ ParseError e
-        Right r -> return r
-
-pscModules :: PureScriptConfig -> IO [P.Module]
-pscModules conf = do
-    mods <- liftIO $ do
-        concat . fst <$> G.globDir (libraryPatterns conf) (libraryBaseDir conf)
-    let prel = preludePath conf
-    concat `fmap` mapM readPscInput (prel : mods)
-
 compile :: PureScriptConfig -> FilePath -> IO String
 compile opt p = do
-    mods <- pscModules opt
-    mn   <- readPscInput p
-    case P.compile (pureScriptOptions opt) (mn ++ mods) [] of
-        Left l           -> throwIO (CompileError l)
-        Right (js, _, _) -> return js
+    mods <- G.globDir (libraryPatterns opt) (libraryBaseDir opt)
+        >>= mapM (\f -> (f,) <$> U.readFile f) . (p:) . concat . fst
+    case P.parseModulesFromFiles id $ ("prelude", P.prelude) : mods of
+        Left l   -> throwIO (ParseError l)
+        Right ms -> case P.compile (pureScriptOptions opt) (map snd ms) (pureScriptPrefix opt) of
+            Left l         -> throwIO (CompileError l)
+            Right (js,_,_) -> return js
 
 pureScript :: MonadIO m => PureScript -> FilePath -> ActionT exts prms m ()
 pureScript env p = do
