module System.Linux.Proc.Process
( ProcessId (..)
, getProcProcessIds
) where
import Control.Error (runExceptT)
import Data.Maybe (mapMaybe)
import System.Linux.Proc.IO
import System.Linux.Proc.Errors
newtype ProcessId
= ProcessId { unProcessId :: Int }
deriving (Eq, Show)
getProcProcessIds :: IO (Either ProcError [ProcessId])
getProcProcessIds =
runExceptT $
mapMaybe maybeProcessId <$> listProcDirectory "/proc"
where
maybeProcessId :: String -> Maybe ProcessId
maybeProcessId str =
case reads str of
[(i, "")] -> Just $ ProcessId i
_ -> Nothing