@@ -41,15 +41,16 @@ import qualified Paths_purescript as Paths
4141import Data.List (sortBy, groupBy, intercalate)
4242import Data.Time.Clock
4343import Data.Function (on)
44−import Data.Maybe (listToMaybe, fromMaybe)
44+import Data.Maybe (fromMaybe)
4545import Control.Monad.Error
4646import Control.Arrow ((&&&))
4747import Control.Applicative
4848import qualified Data.Map as M
4949import qualified Data.Set as S
5050
51−import System.FilePath ((</>), pathSeparator)
52−import System.Directory (getHomeDirectory, doesFileExist)
51+import System.FilePath ((</>), pathSeparator, takeDirectory)
52+import System.Directory (getAppUserDataDirectory, doesFileExist)
53+import System.Environment (getProgName)
5354
5455-- |
5556-- Compile a collection of modules
@@ -232,17 +233,20 @@ importPrelude :: Module -> Module
232233importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
233234
234235preludeFilename :: IO FilePath
235−preludeFilename = fromMaybe missingPrelude . listToMaybe <$> do
236− fs <- sequence [homePrelude, cabalPrelude]
237− filterM doesFileExist fs
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."
238242 where
239− missingPrelude :: FilePath
240− missingPrelude = error "No Prelude found in user home or cabal path."
243+ localPrelude :: IO FilePath
244+ localPrelude = ((</> "prelude.purs") . takeDirectory) <$> getProgName
241245
242− homePrelude :: IO FilePath
243− homePrelude = do
244− homeDir <- getHomeDirectory
245− return $ homeDir </> ".purescript" </> "prelude" </> "prelude.purs"
246+ appPrelude :: IO FilePath
247+ appPrelude = do
248+ appDir <- getAppUserDataDirectory "purescript"
249+ return $ appDir </> "prelude" </> "prelude.purs"
246250
247251 cabalPrelude :: IO FilePath
248252 cabalPrelude = Paths.getDataFileName "prelude/prelude.purs"