{-# LANGUAGE CPP #-}
{-# LANGUAGE UndecidableInstances #-}
module PathSize.Data.PathSizeResult
( PathSizeResult (..),
mkPathE,
mkPathEString,
_PathSizeSuccess,
_PathSizePartial,
_PathSizeFailure,
)
where
import Control.DeepSeq (NFData)
import Control.Exception (Exception)
import Data.Sequence.NonEmpty (NESeq)
import Data.Sequence.NonEmpty qualified as NESeq
import Effects.Exception qualified as Ex
import Effects.FileSystem.OsPath (OsPath)
import GHC.Generics (Generic)
import Optics.Core (Prism', prism)
import PathSize.Exception (PathE (MkPathE))
data PathSizeResult a
=
PathSizeSuccess !a
|
PathSizePartial !(NESeq PathE) !a
|
PathSizeFailure !(NESeq PathE)
deriving stock
(
PathSizeResult a -> PathSizeResult a -> Bool
(PathSizeResult a -> PathSizeResult a -> Bool)
-> (PathSizeResult a -> PathSizeResult a -> Bool)
-> Eq (PathSizeResult a)
forall a. Eq a => PathSizeResult a -> PathSizeResult a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => PathSizeResult a -> PathSizeResult a -> Bool
== :: PathSizeResult a -> PathSizeResult a -> Bool
$c/= :: forall a. Eq a => PathSizeResult a -> PathSizeResult a -> Bool
/= :: PathSizeResult a -> PathSizeResult a -> Bool
Eq,
(forall a b. (a -> b) -> PathSizeResult a -> PathSizeResult b)
-> (forall a b. a -> PathSizeResult b -> PathSizeResult a)
-> Functor PathSizeResult
forall a b. a -> PathSizeResult b -> PathSizeResult a
forall a b. (a -> b) -> PathSizeResult a -> PathSizeResult b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> PathSizeResult a -> PathSizeResult b
fmap :: forall a b. (a -> b) -> PathSizeResult a -> PathSizeResult b
$c<$ :: forall a b. a -> PathSizeResult b -> PathSizeResult a
<$ :: forall a b. a -> PathSizeResult b -> PathSizeResult a
Functor,
(forall x. PathSizeResult a -> Rep (PathSizeResult a) x)
-> (forall x. Rep (PathSizeResult a) x -> PathSizeResult a)
-> Generic (PathSizeResult a)
forall x. Rep (PathSizeResult a) x -> PathSizeResult a
forall x. PathSizeResult a -> Rep (PathSizeResult a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (PathSizeResult a) x -> PathSizeResult a
forall a x. PathSizeResult a -> Rep (PathSizeResult a) x
$cfrom :: forall a x. PathSizeResult a -> Rep (PathSizeResult a) x
from :: forall x. PathSizeResult a -> Rep (PathSizeResult a) x
$cto :: forall a x. Rep (PathSizeResult a) x -> PathSizeResult a
to :: forall x. Rep (PathSizeResult a) x -> PathSizeResult a
Generic,
Int -> PathSizeResult a -> ShowS
[PathSizeResult a] -> ShowS
PathSizeResult a -> String
(Int -> PathSizeResult a -> ShowS)
-> (PathSizeResult a -> String)
-> ([PathSizeResult a] -> ShowS)
-> Show (PathSizeResult a)
forall a. Show a => Int -> PathSizeResult a -> ShowS
forall a. Show a => [PathSizeResult a] -> ShowS
forall a. Show a => PathSizeResult a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> PathSizeResult a -> ShowS
showsPrec :: Int -> PathSizeResult a -> ShowS
$cshow :: forall a. Show a => PathSizeResult a -> String
show :: PathSizeResult a -> String
$cshowList :: forall a. Show a => [PathSizeResult a] -> ShowS
showList :: [PathSizeResult a] -> ShowS
Show
)
deriving anyclass
(
PathSizeResult a -> ()
(PathSizeResult a -> ()) -> NFData (PathSizeResult a)
forall a. NFData a => PathSizeResult a -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall a. NFData a => PathSizeResult a -> ()
rnf :: PathSizeResult a -> ()
NFData
)
_PathSizeSuccess :: Prism' (PathSizeResult a) a
_PathSizeSuccess :: forall a. Prism' (PathSizeResult a) a
_PathSizeSuccess =
(a -> PathSizeResult a)
-> (PathSizeResult a -> Either (PathSizeResult a) a)
-> Prism (PathSizeResult a) (PathSizeResult a) a a
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism
a -> PathSizeResult a
forall a. a -> PathSizeResult a
PathSizeSuccess
( \PathSizeResult a
x -> case PathSizeResult a
x of
PathSizeSuccess a
a -> a -> Either (PathSizeResult a) a
forall a b. b -> Either a b
Right a
a
PathSizeResult a
_ -> PathSizeResult a -> Either (PathSizeResult a) a
forall a b. a -> Either a b
Left PathSizeResult a
x
)
{-# INLINE _PathSizeSuccess #-}
_PathSizePartial :: Prism' (PathSizeResult a) (NESeq PathE, a)
_PathSizePartial :: forall a. Prism' (PathSizeResult a) (NESeq PathE, a)
_PathSizePartial =
((NESeq PathE, a) -> PathSizeResult a)
-> (PathSizeResult a -> Either (PathSizeResult a) (NESeq PathE, a))
-> Prism
(PathSizeResult a)
(PathSizeResult a)
(NESeq PathE, a)
(NESeq PathE, a)
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism
((NESeq PathE -> a -> PathSizeResult a)
-> (NESeq PathE, a) -> PathSizeResult a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry NESeq PathE -> a -> PathSizeResult a
forall a. NESeq PathE -> a -> PathSizeResult a
PathSizePartial)
( \PathSizeResult a
x -> case PathSizeResult a
x of
PathSizePartial NESeq PathE
errs a
a -> (NESeq PathE, a) -> Either (PathSizeResult a) (NESeq PathE, a)
forall a b. b -> Either a b
Right (NESeq PathE
errs, a
a)
PathSizeResult a
_ -> PathSizeResult a -> Either (PathSizeResult a) (NESeq PathE, a)
forall a b. a -> Either a b
Left PathSizeResult a
x
)
{-# INLINE _PathSizePartial #-}
_PathSizeFailure :: Prism' (PathSizeResult a) (NESeq PathE)
_PathSizeFailure :: forall a. Prism' (PathSizeResult a) (NESeq PathE)
_PathSizeFailure =
(NESeq PathE -> PathSizeResult a)
-> (PathSizeResult a -> Either (PathSizeResult a) (NESeq PathE))
-> Prism
(PathSizeResult a) (PathSizeResult a) (NESeq PathE) (NESeq PathE)
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism
NESeq PathE -> PathSizeResult a
forall a. NESeq PathE -> PathSizeResult a
PathSizeFailure
( \PathSizeResult a
x -> case PathSizeResult a
x of
PathSizeFailure NESeq PathE
errs -> NESeq PathE -> Either (PathSizeResult a) (NESeq PathE)
forall a b. b -> Either a b
Right NESeq PathE
errs
PathSizeResult a
_ -> PathSizeResult a -> Either (PathSizeResult a) (NESeq PathE)
forall a b. a -> Either a b
Left PathSizeResult a
x
)
{-# INLINE _PathSizeFailure #-}
mkPathE :: (Exception e) => OsPath -> e -> PathSizeResult a
mkPathE :: forall e a. Exception e => OsPath -> e -> PathSizeResult a
mkPathE OsPath
path = OsPath -> String -> PathSizeResult a
forall a. OsPath -> String -> PathSizeResult a
mkPathEString OsPath
path (String -> PathSizeResult a)
-> (e -> String) -> e -> PathSizeResult a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. e -> String
displayFn
where
displayFn :: e -> String
displayFn =
#if MIN_VERSION_base(4, 20, 0)
Ex.displayInner
#else
e -> String
forall e. Exception e => e -> String
Ex.displayNoCS
#endif
mkPathEString :: OsPath -> String -> PathSizeResult a
mkPathEString :: forall a. OsPath -> String -> PathSizeResult a
mkPathEString OsPath
path = NESeq PathE -> PathSizeResult a
forall a. NESeq PathE -> PathSizeResult a
PathSizeFailure (NESeq PathE -> PathSizeResult a)
-> (String -> NESeq PathE) -> String -> PathSizeResult a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PathE -> NESeq PathE
forall a. a -> NESeq a
NESeq.singleton (PathE -> NESeq PathE)
-> (String -> PathE) -> String -> NESeq PathE
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OsPath -> String -> PathE
MkPathE OsPath
path