@@ -41,14 +41,17 @@ import qualified Paths_purescript as Paths
4141import Data.List (find , sortBy , groupBy , intercalate )
4242import Data.Time.Clock
4343import Data.Function (on )
44- import Data.Maybe (fromMaybe )
44+ import Data.Maybe (listToMaybe , fromMaybe )
4545import Control.Monad.Error
4646import Control.Monad.State.Lazy
4747import Control.Arrow ((&&&) )
4848import Control.Applicative
4949import qualified Data.Map as M
5050import qualified Data.Set as S
51- import System.FilePath (pathSeparator )
51+
52+ import System.FilePath ((</>) , pathSeparator )
53+ import System.Directory (getHomeDirectory , doesFileExist )
54+ import System.Environment.XDG.BaseDir (getUserConfigDir )
5255
5356-- |
5457-- Compile a collection of modules
@@ -268,4 +271,22 @@ importPrelude :: Module -> Module
268271importPrelude = addDefaultImport (ModuleName [ProperName C. prelude])
269272
270273preludeFilename :: IO FilePath
271- preludeFilename = Paths. getDataFileName " prelude/prelude.purs"
274+ preludeFilename = fromMaybe missingPrelude . listToMaybe <$> do
275+ fs <- sequence [xdsPrelude, homePrelude, cabalPrelude]
276+ filterM doesFileExist fs
277+ where
278+ missingPrelude :: FilePath
279+ missingPrelude = error " No Prelude found in user home, XDS user config directory or cabal path."
280+
281+ xdsPrelude :: IO FilePath
282+ xdsPrelude = do
283+ configDir <- getUserConfigDir " purescript"
284+ return $ configDir </> " prelude" </> " prelude.purs"
285+
286+ homePrelude :: IO FilePath
287+ homePrelude = do
288+ homeDir <- getHomeDirectory
289+ return $ homeDir </> " .purescript" </> " prelude" </> " prelude.purs"
290+
291+ cabalPrelude :: IO FilePath
292+ cabalPrelude = Paths. getDataFileName " prelude/prelude.purs"
0 commit comments