@@ -6,6 +6,8 @@ import Control.Lens
66import Data.Bifunctor
77import Data.ByteString as BS
88import Data.Coerce
9+import Data.Foldable as F
10+import Data.List.NonEmpty as NE
911import Data.Maybe
1012import Data.Text as T
1113import Data.Yaml
@@ -48,7 +50,7 @@ makeLenses ''StackPackage
4850
4951data StackConfig = StackConfig
5052 { _scResolver :: !StackResolver
51− , _scPackages :: ![StackPackage]
53+ , _scPackages :: !(NonEmpty StackPackage)
5254 } deriving (Eq, Ord, Show)
5355
5456makeLenses ''StackConfig
@@ -56,10 +58,12 @@ makeLenses ''StackConfig
5658fromYamlConfig :: Yaml.Config -> StackConfig
5759fromYamlConfig c = StackConfig{..}
5860 where
59− _scResolver = coerce $ c ^. cResolver
60− _scPackages =
61− (fromYamlPackage <$> c ^. cPackages . to (fromMaybe mempty)) ++
62− (fromYamlExtraDep <$> c ^. cExtraDeps . to (fromMaybe mempty))
61+ _scResolver = coerce $ c ^. cResolver
62+ _scPackages = F.foldr (NE.<|) neYamlPackages yamlExtraDeps
63+ neYamlPackages = fromMaybe (pure defaultPackage) $ NE.nonEmpty yamlPackages
64+ yamlPackages = fromYamlPackage <$> fromMaybe mempty (c ^. cPackages)
65+ yamlExtraDeps = fromYamlExtraDep <$> fromMaybe mempty (c ^. cExtraDeps)
66+ defaultPackage = StackPackage (StackFilePath ".") False
6367
6468fromYamlPackage :: Yaml.Package -> StackPackage
6569fromYamlPackage = \case