@@ -181,6 +181,14 @@ install pkgName = do
181 writePackageFile pkg'
181 writePackageFile pkg'
182 echo "psc-package.json file was updated"
182 echo "psc-package.json file was updated"
184+uninstall :: String -> IO ()
185+uninstall pkgName = do
186+ pkg <- readPackageFile
187+ let pkg' = pkg { depends = filter (/= pack pkgName) $ depends pkg }
189+ writePackageFile pkg'
190+ echo "psc-package.json file was updated"
184listDependencies :: IO ()
192listDependencies :: IO ()
185listDependencies = do
193listDependencies = do
186 pkg@PackageConfig{ depends } <- readPackageFile
194 pkg@PackageConfig{ depends } <- readPackageFile
@@ -188,6 +196,15 @@ listDependencies = do
188 trans <- getTransitiveDeps db depends
196 trans <- getTransitiveDeps db depends
189 traverse_ (echo . fst) trans
197 traverse_ (echo . fst) trans
199+listPackages :: IO ()
201+ pkg <- readPackageFile
202+ db <- readPackageSet pkg
203+ traverse_ echo (fmt <$> Map.assocs db)
205+ fmt :: (Text, PackageInfo) -> Text
206+ fmt (name, PackageInfo{ version }) = name <> " (" <> version <> ")"
191getSourcePaths :: PackageConfig -> PackageSet -> [Text] -> IO [Turtle.FilePath]
208getSourcePaths :: PackageConfig -> PackageSet -> [Text] -> IO [Turtle.FilePath]
192getSourcePaths PackageConfig{..} db pkgNames = do
209getSourcePaths PackageConfig{..} db pkgNames = do
193 trans <- getTransitiveDeps db pkgNames
210 trans <- getTransitiveDeps db pkgNames
@@ -240,6 +257,9 @@ main = do
240 , Opts.command "update"
257 , Opts.command "update"
241 (Opts.info (pure update)
258 (Opts.info (pure update)
242 (Opts.progDesc "Update dependencies"))
259 (Opts.progDesc "Update dependencies"))
260+ , Opts.command "uninstall"
261+ (Opts.info (uninstall <$> pkg)
262+ (Opts.progDesc "Uninstall the named package"))
243 , Opts.command "install"
263 , Opts.command "install"
244 (Opts.info (install <$> pkg)
264 (Opts.info (install <$> pkg)
245 (Opts.progDesc "Install the named package"))
265 (Opts.progDesc "Install the named package"))
@@ -252,6 +272,9 @@ main = do
252 , Opts.command "sources"
272 , Opts.command "sources"
253 (Opts.info (pure listSourcePaths)
273 (Opts.info (pure listSourcePaths)
254 (Opts.progDesc "List all (active) source paths for dependencies"))
274 (Opts.progDesc "List all (active) source paths for dependencies"))
275+ , Opts.command "available"
276+ (Opts.info (pure listPackages)
277+ (Opts.progDesc "List all packages available in the package set"))
257 pkg = Opts.strArgument $
280 pkg = Opts.strArgument $