@@ -41,15 +41,16 @@ import qualified Paths_purescript as Paths
41import Data.List (sortBy, groupBy, intercalate)
41import Data.List (sortBy, groupBy, intercalate)
42import Data.Time.Clock
42import Data.Time.Clock
43import Data.Function (on)
43import Data.Function (on)
44−import Data.Maybe (listToMaybe, fromMaybe)
44+import Data.Maybe (fromMaybe)
45import Control.Monad.Error
45import Control.Monad.Error
46import Control.Arrow ((&&&))
46import Control.Arrow ((&&&))
47import Control.Applicative
47import Control.Applicative
48import qualified Data.Map as M
48import qualified Data.Map as M
49import qualified Data.Set as S
49import qualified Data.Set as S
51−import System.FilePath ((</>), pathSeparator)
51+import System.FilePath ((</>), pathSeparator, takeDirectory)
52−import System.Directory (getHomeDirectory, doesFileExist)
52+import System.Directory (getAppUserDataDirectory, doesFileExist)
53+import System.Environment (getProgName)
55-- Compile a collection of modules
56-- Compile a collection of modules
@@ -232,17 +233,20 @@ importPrelude :: Module -> Module
232importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
233importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
234preludeFilename :: IO FilePath
235preludeFilename :: IO FilePath
235−preludeFilename = fromMaybe missingPrelude . listToMaybe <$> do
236+preludeFilename = do
236− fs <- sequence [homePrelude, cabalPrelude]
237+ fs <- sequence [localPrelude, appPrelude, cabalPrelude]
237− filterM doesFileExist fs
238+ es <- filterM doesFileExist fs
241+ _ -> error "No Prelude found."
239− missingPrelude :: FilePath
243+ localPrelude :: IO FilePath
240− missingPrelude = error "No Prelude found in user home or cabal path."
244+ localPrelude = ((</> "prelude.purs") . takeDirectory) <$> getProgName
242− homePrelude :: IO FilePath
246+ appPrelude :: IO FilePath
243− homePrelude = do
247+ appPrelude = do
244− homeDir <- getHomeDirectory
248+ appDir <- getAppUserDataDirectory "purescript"
245− return $ homeDir </> ".purescript" </> "prelude" </> "prelude.purs"
249+ return $ appDir </> "prelude" </> "prelude.purs"
247 cabalPrelude :: IO FilePath
251 cabalPrelude :: IO FilePath
248 cabalPrelude = Paths.getDataFileName "prelude/prelude.purs"
252 cabalPrelude = Paths.getDataFileName "prelude/prelude.purs"