packages feed

pfile-0.1.0.0: src/PFile/Main/List.hs

{- |
Module:      PFile.Main.List
Copyright:   (c) 2024 Illia Shkroba
License:     BSD3
Maintainer:  Illia Shkroba <is@pjwstk.edu.pl>
Stability:   unstable
Portability: non-portable (Non-Unix systems are not supported)

Main for `pfile ls`.
-}

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns   #-}

module PFile.Main.List
  ( main
  ) where

import           PFile.CLI.List (Options (..))
import           PFile.Env      (Env)
import           PFile.Error    (modifyError)
import qualified PFile.Log      as Log
import qualified PFile.Profile  as Profile
import           Protolude

main :: (MonadReader Env m, MonadIO m) => Options -> m ()
main Options {shouldFilterDangling} =
  either Log.panic pure <=< runExceptT $
    Profile.list listOptions
      & modifyError Profile.showListError
      >>= traverse_ (putStrLn . Profile.unName . Profile.name)
  where
    listOptions :: Profile.ListOptions
    listOptions = Profile.ListOptions {Profile.shouldFilterDangling}