@@ -13,9 +13,9 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE DataKinds #-}
16+{-# LANGUAGE DataKinds, QuasiQuotes, TemplateHaskell #-}
1717
18−module Language.PureScript (module P, compile, compile', MonadMake(..), make, preludeFilename) where
18+module Language.PureScript (module P, compile, compile', MonadMake(..), make, prelude) where
1919
2020import Language.PureScript.Types as P
2121import Language.PureScript.Kinds as P
@@ -36,21 +36,22 @@ import Language.PureScript.Supply as P
3636import Language.PureScript.Renamer as P
3737
3838import qualified Language.PureScript.Constants as C
39−import qualified Paths_purescript as Paths
4039
4140import Data.List (sortBy, groupBy, intercalate)
4241import Data.Time.Clock
4342import Data.Function (on)
4443import Data.Maybe (fromMaybe)
44+import Data.FileEmbed (embedFile)
45+
4546import Control.Monad.Error
4647import Control.Arrow ((&&&))
4748import Control.Applicative
49+
4850import qualified Data.Map as M
4951import qualified Data.Set as S
52+import qualified Data.ByteString.UTF8 as BU
5053
51−import System.FilePath ((</>), pathSeparator, takeDirectory)
52−import System.Directory (getAppUserDataDirectory, doesFileExist)
53−import System.Environment (getProgName)
54+import System.FilePath ((</>))
5455
5556-- |
5657-- Compile a collection of modules
@@ -146,8 +147,8 @@ make outputDir opts ms prefix = do
146147 toRebuild <- foldM (\s (Module moduleName' _ _) -> do
147148 let filePath = runModuleName moduleName'
148149
149− jsFile = outputDir ++ pathSeparator : filePath ++ pathSeparator : "index.js"
150− externsFile = outputDir ++ pathSeparator : filePath ++ pathSeparator : "externs.purs"
150+ jsFile = outputDir </> filePath </> "index.js"
151+ externsFile = outputDir </> filePath </> "externs.purs"
151152 inputFile = fromMaybe (error "Input file is undefined in make") $ M.lookup moduleName' filePathMap
152153
153154 jsTimestamp <- getTimestamp jsFile
@@ -173,8 +174,8 @@ make outputDir opts ms prefix = do
173174 go env' ms'
174175 go env ((True, m@(Module moduleName' _ exps)) : ms') = do
175176 let filePath = runModuleName moduleName'
176− jsFile = outputDir ++ pathSeparator : filePath ++ pathSeparator : "index.js"
177− externsFile = outputDir ++ pathSeparator : filePath ++ pathSeparator : "externs.purs"
177+ jsFile = outputDir </> filePath </> "index.js"
178+ externsFile = outputDir </> filePath </> "externs.purs"
178179
179180 lift . progress $ "Compiling " ++ runModuleName moduleName'
180181
@@ -201,7 +202,7 @@ make outputDir opts ms prefix = do
201202 toRebuild' = toRebuild `S.union` S.fromList deps
202203 (:) (True, m) <$> rebuildIfNecessary graph toRebuild' ms'
203204 rebuildIfNecessary graph toRebuild (Module moduleName' _ _ : ms') = do
204− let externsFile = outputDir ++ pathSeparator : runModuleName moduleName' ++ pathSeparator : "externs.purs"
205+ let externsFile = outputDir </> runModuleName moduleName' </> "externs.purs"
205206 externs <- readTextFile externsFile
206207 externsModules <- liftError . either (Left . show) Right $ P.runIndentParser externsFile P.parseModules externs
207208 case externsModules of
@@ -232,21 +233,5 @@ importPrim = addDefaultImport (ModuleName [ProperName C.prim])
232233importPrelude :: Module -> Module
233234importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
234235
235−preludeFilename :: IO FilePath
236−preludeFilename = do
237− fs <- sequence [localPrelude, appPrelude, cabalPrelude]
238− es <- filterM doesFileExist fs
239− case es of
240− (x : _) -> return x
241− _ -> error "No Prelude found."
242− where
243− localPrelude :: IO FilePath
244− localPrelude = ((</> "prelude.purs") . takeDirectory) <$> getProgName
245−
246− appPrelude :: IO FilePath
247− appPrelude = do
248− appDir <- getAppUserDataDirectory "purescript"
249− return $ appDir </> "prelude" </> "prelude.purs"
250−
251− cabalPrelude :: IO FilePath
252− cabalPrelude = Paths.getDataFileName "prelude/prelude.purs"
236+prelude :: String
237+prelude = BU.toString $(embedFile "prelude/prelude.purs")