hix-0.4.0.0: lib/Hix/Prelude.hs
module Hix.Prelude where
import Data.Generics.Labels ()
import Data.List.Extra (firstJust)
import qualified Distribution.ModuleName as ModuleName
import Distribution.ModuleName (ModuleName)
import Distribution.PackageDescription (ModuleRenaming (..), unPackageName)
import Distribution.Types.IncludeRenaming (IncludeRenaming (..))
import Distribution.Types.Mixin (Mixin (..))
import qualified Exon
data Prelude =
Prelude {
preludePackage :: String,
preludeModule :: String
}
deriving stock (Eq, Show)
preludeRenaming :: [(b, ModuleName)] -> Maybe b
preludeRenaming =
firstJust \case
(real, "Prelude") -> Just real
_ -> Nothing
pattern PreludeRenaming :: ModuleName -> ModuleRenaming
pattern PreludeRenaming p <- ModuleRenaming (preludeRenaming -> Just p)
pattern PreludeInclude :: ModuleName -> IncludeRenaming
pattern PreludeInclude p <- IncludeRenaming {includeProvidesRn = PreludeRenaming p}
findPrelude :: [Mixin] -> Maybe Prelude
findPrelude =
firstJust \case
Mixin {mixinIncludeRenaming = PreludeInclude real, ..} ->
let
preludePackage = unPackageName mixinPackageName
preludeModule = Exon.intercalate "." (ModuleName.components real)
in Just Prelude {..}
_ -> Nothing