@@ -100,17 +100,7 @@ module Stack.Types.Config
100100 -- ** PvpBounds
101101 ,PvpBounds (.. )
102102 ,parsePvpBounds
103- -- ** Resolver & AbstractResolver
104- ,Resolver
105- ,LoadedResolver
106- ,ResolverThat's (.. )
107- ,parseResolverText
108- ,resolverDirName
109- ,resolverName
110- ,customResolverHash
111- ,toResolverNotLoaded
112- ,AbstractResolver (.. )
113- ,readAbstractResolver
103+ -- ** ColorWhen
114104 ,ColorWhen (.. )
115105 ,readColorWhen
116106 -- ** SCM
@@ -165,13 +155,13 @@ import Control.Applicative
165155import Control.Arrow ((&&&) )
166156import Control.Exception
167157import Control.Monad (liftM , mzero , join )
168- import Control.Monad.Catch (MonadThrow , MonadMask , throwM )
158+ import Control.Monad.Catch (MonadThrow , MonadMask )
169159import Control.Monad.Logger (LogLevel (.. ), MonadLoggerIO )
170160import Control.Monad.Reader (MonadReader , ask , asks , MonadIO , liftIO )
171161import Control.Monad.Trans.Control
172162import Data.Aeson.Extended
173163 (ToJSON , toJSON , FromJSON , parseJSON , withText , object ,
174- (.=) , (..:) , (..:?) , (..!=) , Value (Bool , String , Object ),
164+ (.=) , (..:) , (..:?) , (..!=) , Value (Bool , String ),
175165 withObjectWarnings , WarningParser , Object , jsonSubWarnings ,
176166 jsonSubWarningsT , jsonSubWarningsTT , WithJSONWarnings (.. ), noJSONWarnings )
177167import Data.Attoparsec.Args
@@ -191,8 +181,7 @@ import Data.Set (Set)
191181import qualified Data.Set as Set
192182import Data.Text (Text )
193183import qualified Data.Text as T
194- import Data.Text.Encoding (encodeUtf8 , decodeUtf8 )
195- import Data.Text.Read (decimal )
184+ import Data.Text.Encoding (encodeUtf8 )
196185import Data.Typeable
197186import Data.Yaml (ParseException )
198187import qualified Data.Yaml as Yaml
@@ -208,7 +197,7 @@ import qualified Options.Applicative as OA
208197import qualified Options.Applicative.Types as OA
209198import Path
210199import qualified Paths_stack as Meta
211- import Stack.Types.BuildPlan (MiniBuildPlan (.. ), SnapName , renderSnapName , parseSnapName , SnapshotHash ( .. ), trimmedSnapshotHash )
200+ import Stack.Types.BuildPlan (MiniBuildPlan (.. ), SnapName , renderSnapName )
212201import Stack.Types.Compiler
213202import Stack.Types.CompilerBuild
214203import Stack.Types.Docker
@@ -218,6 +207,7 @@ import Stack.Types.Nix
218207import Stack.Types.PackageIdentifier
219208import Stack.Types.PackageIndex
220209import Stack.Types.PackageName
210+ import Stack.Types.Resolver
221211import Stack.Types.TemplateName
222212import Stack.Types.Urls
223213import Stack.Types.Version
@@ -459,30 +449,6 @@ instance Monoid GlobalOptsMonoid where
459449 mempty = memptydefault
460450 mappend = mappenddefault
461451
462- -- | Either an actual resolver value, or an abstract description of one (e.g.,
463- -- latest nightly).
464- data AbstractResolver
465- = ARLatestNightly
466- | ARLatestLTS
467- | ARLatestLTSMajor ! Int
468- | ARResolver ! Resolver
469- | ARGlobal
470- deriving Show
471-
472- readAbstractResolver :: ReadM AbstractResolver
473- readAbstractResolver = do
474- s <- OA. readerAsk
475- case s of
476- " global" -> return ARGlobal
477- " nightly" -> return ARLatestNightly
478- " lts" -> return ARLatestLTS
479- ' l' : ' t' : ' s' : ' -' : x | Right (x', " " ) <- decimal $ T. pack x ->
480- return $ ARLatestLTSMajor x'
481- _ ->
482- case parseResolverText $ T. pack s of
483- Left e -> OA. readerError $ show e
484- Right x -> return $ ARResolver x
485-
486452-- | Default logging level should be something useful but not crazy.
487453defaultLogLevel :: LogLevel
488454defaultLogLevel = LevelInfo
@@ -693,90 +659,6 @@ instance ToJSON Project where
693659 , " extra-package-dbs" .= projectExtraPackageDBs p
694660 ]
695661
696- data IsLoaded = Loaded | NotLoaded
697-
698- type LoadedResolver = ResolverThat's 'Loaded
699- type Resolver = ResolverThat's 'NotLoaded
700-
701- -- TODO: once GHC 8.0 is the lowest version we support, make these into
702- -- actual haddock comments...
703-
704- -- | How we resolve which dependencies to install given a set of packages.
705- data ResolverThat's (l :: IsLoaded ) where
706- -- Use an official snapshot from the Stackage project, either an LTS
707- -- Haskell or Stackage Nightly.
708- ResolverSnapshot :: ! SnapName -> ResolverThat's l
709- -- Require a specific compiler version, but otherwise provide no
710- -- build plan. Intended for use cases where end user wishes to
711- -- specify all upstream dependencies manually, such as using a
712- -- dependency solver.
713- ResolverCompiler :: ! CompilerVersion -> ResolverThat's l
714- -- A custom resolver based on the given name and URL. When a URL is
715- -- provided, it file is to be completely immutable. Filepaths are
716- -- always loaded. This constructor is used before the build-plan has
717- -- been loaded, as we do not yet know the custom snapshot's hash.
718- ResolverCustom :: ! Text -> ! Text -> ResolverThat's 'NotLoaded
719- -- Like 'ResolverCustom', but after loading the build-plan, so we
720- -- have a hash. This is necessary in order to identify the location
721- -- files are stored for the resolver.
722- ResolverCustomLoaded :: ! Text -> ! Text -> ! SnapshotHash -> ResolverThat's 'Loaded
723-
724- deriving instance Eq (ResolverThat's k )
725- deriving instance Show (ResolverThat's k )
726-
727- instance ToJSON (ResolverThat's k ) where
728- toJSON x = case x of
729- ResolverSnapshot {} -> toJSON $ resolverName x
730- ResolverCompiler {} -> toJSON $ resolverName x
731- ResolverCustom n l -> handleCustom n l
732- ResolverCustomLoaded n l _ -> handleCustom n l
733- where
734- handleCustom n l = object
735- [ " name" .= n
736- , " location" .= l
737- ]
738- instance FromJSON (WithJSONWarnings (ResolverThat's 'NotLoaded)) where
739- -- Strange structuring is to give consistent error messages
740- parseJSON v@ (Object _) = withObjectWarnings " Resolver" (\ o -> ResolverCustom
741- <$> o ..: " name"
742- <*> o ..: " location" ) v
743-
744- parseJSON (String t) = either (fail . show ) return (noJSONWarnings <$> parseResolverText t)
745-
746- parseJSON _ = fail " Invalid Resolver, must be Object or String"
747-
748- -- | Convert a Resolver into its @Text@ representation, as will be used by
749- -- directory names
750- resolverDirName :: LoadedResolver -> Text
751- resolverDirName (ResolverSnapshot name) = renderSnapName name
752- resolverDirName (ResolverCompiler v) = compilerVersionText v
753- resolverDirName (ResolverCustomLoaded name _ hash) = " custom-" <> name <> " -" <> decodeUtf8 (trimmedSnapshotHash hash)
754-
755- -- | Convert a Resolver into its @Text@ representation for human
756- -- presentation.
757- resolverName :: ResolverThat's l -> Text
758- resolverName (ResolverSnapshot name) = renderSnapName name
759- resolverName (ResolverCompiler v) = compilerVersionText v
760- resolverName (ResolverCustom name _) = " custom-" <> name
761- resolverName (ResolverCustomLoaded name _ _) = " custom-" <> name
762-
763- customResolverHash :: LoadedResolver -> Maybe SnapshotHash
764- customResolverHash (ResolverCustomLoaded _ _ hash) = Just hash
765- customResolverHash _ = Nothing
766-
767- -- | Try to parse a @Resolver@ from a @Text@. Won't work for complex resolvers (like custom).
768- parseResolverText :: MonadThrow m => Text -> m Resolver
769- parseResolverText t
770- | Right x <- parseSnapName t = return $ ResolverSnapshot x
771- | Just v <- parseCompilerVersion t = return $ ResolverCompiler v
772- | otherwise = throwM $ ParseResolverException t
773-
774- toResolverNotLoaded :: LoadedResolver -> Resolver
775- toResolverNotLoaded r = case r of
776- ResolverSnapshot s -> ResolverSnapshot s
777- ResolverCompiler v -> ResolverCompiler v
778- ResolverCustomLoaded n l _ -> ResolverCustom n l
779-
780662-- | Class for environment values which have access to the stack root
781663class HasStackRoot env where
782664 getStackRoot :: env -> Path Abs Dir
0 commit comments