module Sys.ExitCode(
ExitCode
, _ExitFailure
, _ExitSuccess
, exitFailure
, exitSuccess
, exitFailureP
, exitSuccessP
, exitCode
, unExitCode
) where
import Control.Lens(Prism', prism', (#))
import Data.Int(Int)
import Data.Maybe(Maybe(Nothing, Just))
import Data.NotZero(NotZero, notZero, notZeroElse, notZero1)
import Data.NotZeroOr(Number, NotZeroOr(IsNotZero, OrNotZero), _IsNotZero, _OrNotZero)
import qualified System.Exit as Exit
type ExitCode =
Number Int
_ExitFailure ::
Prism' ExitCode (NotZero Int)
_ExitFailure =
_IsNotZero
_ExitSuccess ::
Prism' ExitCode ()
_ExitSuccess =
_OrNotZero
exitFailure ::
NotZero Int
-> ExitCode
exitFailure =
(_ExitFailure #)
exitSuccess ::
ExitCode
exitSuccess =
_ExitSuccess # ()
exitFailureP ::
Prism' Exit.ExitCode Int
exitFailureP =
prism'
Exit.ExitFailure
(\x -> case x of
Exit.ExitFailure y ->
Just y
Exit.ExitSuccess ->
Nothing)
exitSuccessP ::
Prism' Exit.ExitCode ()
exitSuccessP =
prism'
(\() -> Exit.ExitSuccess)
(\x -> case x of
Exit.ExitFailure _ ->
Nothing
Exit.ExitSuccess ->
Just ())
exitCode ::
ExitCode
-> Exit.ExitCode
exitCode (IsNotZero a) =
Exit.ExitFailure (notZero # a)
exitCode (OrNotZero ()) =
Exit.ExitSuccess
unExitCode ::
Exit.ExitCode
-> ExitCode
unExitCode (Exit.ExitSuccess) =
exitSuccess
unExitCode (Exit.ExitFailure 0) =
exitSuccess
unExitCode (Exit.ExitFailure n) =
exitFailure (notZeroElse notZero1 n)