@@ -181,6 +181,14 @@ install pkgName = do
181181 writePackageFile pkg'
182182 echo "psc-package.json file was updated"
183183
184+uninstall :: String -> IO ()
185+uninstall pkgName = do
186+ pkg <- readPackageFile
187+ let pkg' = pkg { depends = filter (/= pack pkgName) $ depends pkg }
188+ updateImpl pkg'
189+ writePackageFile pkg'
190+ echo "psc-package.json file was updated"
191+
184192listDependencies :: IO ()
185193listDependencies = do
186194 pkg@PackageConfig{ depends } <- readPackageFile
@@ -188,6 +196,15 @@ listDependencies = do
188196 trans <- getTransitiveDeps db depends
189197 traverse_ (echo . fst) trans
190198
199+listPackages :: IO ()
200+listPackages = do
201+ pkg <- readPackageFile
202+ db <- readPackageSet pkg
203+ traverse_ echo (fmt <$> Map.assocs db)
204+ where
205+ fmt :: (Text, PackageInfo) -> Text
206+ fmt (name, PackageInfo{ version }) = name <> " (" <> version <> ")"
207+
191208getSourcePaths :: PackageConfig -> PackageSet -> [Text] -> IO [Turtle.FilePath]
192209getSourcePaths PackageConfig{..} db pkgNames = do
193210 trans <- getTransitiveDeps db pkgNames
@@ -240,6 +257,9 @@ main = do
240257 , Opts.command "update"
241258 (Opts.info (pure update)
242259 (Opts.progDesc "Update dependencies"))
260+ , Opts.command "uninstall"
261+ (Opts.info (uninstall <$> pkg)
262+ (Opts.progDesc "Uninstall the named package"))
243263 , Opts.command "install"
244264 (Opts.info (install <$> pkg)
245265 (Opts.progDesc "Install the named package"))
@@ -252,6 +272,9 @@ main = do
252272 , Opts.command "sources"
253273 (Opts.info (pure listSourcePaths)
254274 (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"))
255278 ]
256279 where
257280 pkg = Opts.strArgument $