packages feed

language-dickinson-1.2.0.0: src/Language/Dickinson/Lib.hs

module Language.Dickinson.Lib ( defaultLibPath
                              , dckPath
                              ) where

import           Data.List.Split          (splitWhen)
import           Paths_language_dickinson (getDataDir)
import           System.Environment       (lookupEnv)
import           System.FilePath          ((</>))

dckPath :: IO [FilePath]
dckPath = maybe [] splitEnv <$> lookupEnv "DCK_PATH"

splitEnv :: String -> [FilePath]
splitEnv = splitWhen (== ':')

preludeLibPath :: FilePath -> [FilePath] -> [FilePath]
preludeLibPath fp = (preludeDir :) . (libDir :)
    where preludeDir = fp </> "prelude"
          libDir = fp </> "lib"

homeMod :: IO ([FilePath] -> [FilePath])
homeMod = do
    mHome <- lookupEnv "HOME"
    pure $ case mHome of
        Just h  -> preludeLibPath (h </> ".emd")
        Nothing -> id

defaultLibPath :: IO ([FilePath] -> [FilePath])
defaultLibPath = do
    datadir <- getDataDir
    (.) (preludeLibPath datadir) <$> homeMod