Skip to content

Commit 8bf954a

Browse files
committed
1 parent caa1dc6 commit 8bf954a

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/Language/PureScript.hs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@ import qualified Paths_purescript as Paths
4141
import Data.List (find, sortBy, groupBy, intercalate)
4242
import Data.Time.Clock
4343
import Data.Function (on)
44-
import Data.Maybe (fromMaybe)
44+
import Data.Maybe (listToMaybe, fromMaybe)
4545
import Control.Monad.Error
4646
import Control.Monad.State.Lazy
4747
import Control.Arrow ((&&&))
4848
import Control.Applicative
4949
import qualified Data.Map as M
5050
import 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
268271
importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
269272

270273
preludeFilename :: 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

Comments
 (0)