{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wall #-}
module Control.Exitcode.Optics
( GetExitcode (..),
HasExitcode (..),
ReviewExitcode (..),
AsExitcode (..),
GetExitcodeBifunctor (..),
HasExitcodeBifunctor (..),
ReviewExitcodeBifunctor (..),
AsExitcodeBifunctor (..),
)
where
import Control.Category (id, (.))
import Control.Exitcode.Exitcode (Exitcode, ExitcodeBifunctor (ExitcodeBifunctor))
import Control.Lens (Getter, Lens', Prism', Review, lens, prism', unto)
import Data.Maybe (Maybe (Just))
class GetExitcode s e f a | s -> e f a where
getExitcode :: Getter s (Exitcode e f a)
instance GetExitcode (Exitcode e f a) e f a where
getExitcode :: Getter (Exitcode e f a) (Exitcode e f a)
getExitcode = (Exitcode e f a -> f (Exitcode e f a))
-> Exitcode e f a -> f (Exitcode e f a)
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE getExitcode #-}
instance GetExitcode (ExitcodeBifunctor f e a) e f a where
getExitcode :: Getter (ExitcodeBifunctor f e a) (Exitcode e f a)
getExitcode = (ExitcodeBifunctor f e a -> Exitcode e f a)
-> (ExitcodeBifunctor f e a
-> Exitcode e f a -> ExitcodeBifunctor f e a)
-> Lens
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
(Exitcode e f a)
(Exitcode e f a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (\(ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x) (\ExitcodeBifunctor f e a
_ -> Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor)
{-# INLINE getExitcode #-}
class (GetExitcode s e f a) => HasExitcode s e f a | s -> e f a where
exitcode :: Lens' s (Exitcode e f a)
instance HasExitcode (Exitcode e f a) e f a where
exitcode :: Lens' (Exitcode e f a) (Exitcode e f a)
exitcode = (Exitcode e f a -> f (Exitcode e f a))
-> Exitcode e f a -> f (Exitcode e f a)
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE exitcode #-}
instance HasExitcode (ExitcodeBifunctor f e a) e f a where
exitcode :: Lens' (ExitcodeBifunctor f e a) (Exitcode e f a)
exitcode = (ExitcodeBifunctor f e a -> Exitcode e f a)
-> (ExitcodeBifunctor f e a
-> Exitcode e f a -> ExitcodeBifunctor f e a)
-> Lens' (ExitcodeBifunctor f e a) (Exitcode e f a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (\(ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x) (\ExitcodeBifunctor f e a
_ Exitcode e f a
x -> Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor Exitcode e f a
x)
{-# INLINE exitcode #-}
class ReviewExitcode t e f a | t -> e f a where
reviewExitcode :: Review t (Exitcode e f a)
instance ReviewExitcode (Exitcode e f a) e f a where
reviewExitcode :: Review (Exitcode e f a) (Exitcode e f a)
reviewExitcode = (Exitcode e f a -> Exitcode e f a)
-> Optic
p
f
(Exitcode e f a)
(Exitcode e f a)
(Exitcode e f a)
(Exitcode e f a)
forall (p :: * -> * -> *) (f :: * -> *) b t s a.
(Profunctor p, Bifunctor p, Functor f) =>
(b -> t) -> Optic p f s t a b
unto Exitcode e f a -> Exitcode e f a
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE reviewExitcode #-}
instance ReviewExitcode (ExitcodeBifunctor f e a) e f a where
reviewExitcode :: Review (ExitcodeBifunctor f e a) (Exitcode e f a)
reviewExitcode = (Exitcode e f a -> ExitcodeBifunctor f e a)
-> Optic
p
f
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
(Exitcode e f a)
(Exitcode e f a)
forall (p :: * -> * -> *) (f :: * -> *) b t s a.
(Profunctor p, Bifunctor p, Functor f) =>
(b -> t) -> Optic p f s t a b
unto Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor
{-# INLINE reviewExitcode #-}
class (ReviewExitcode t e f a) => AsExitcode t e f a | t -> e f a where
_Exitcode :: Prism' t (Exitcode e f a)
instance AsExitcode (Exitcode e f a) e f a where
_Exitcode :: Prism' (Exitcode e f a) (Exitcode e f a)
_Exitcode = p (Exitcode e f a) (f (Exitcode e f a))
-> p (Exitcode e f a) (f (Exitcode e f a))
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE _Exitcode #-}
instance AsExitcode (ExitcodeBifunctor f e a) e f a where
_Exitcode :: Prism' (ExitcodeBifunctor f e a) (Exitcode e f a)
_Exitcode = (Exitcode e f a -> ExitcodeBifunctor f e a)
-> (ExitcodeBifunctor f e a -> Maybe (Exitcode e f a))
-> Prism' (ExitcodeBifunctor f e a) (Exitcode e f a)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor (\(ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a -> Maybe (Exitcode e f a)
forall a. a -> Maybe a
Just Exitcode e f a
x)
{-# INLINE _Exitcode #-}
class GetExitcodeBifunctor s f e a | s -> f e a where
getExitcodeBifunctor :: Getter s (ExitcodeBifunctor f e a)
instance GetExitcodeBifunctor (ExitcodeBifunctor f e a) f e a where
getExitcodeBifunctor :: Getter (ExitcodeBifunctor f e a) (ExitcodeBifunctor f e a)
getExitcodeBifunctor = (ExitcodeBifunctor f e a -> f (ExitcodeBifunctor f e a))
-> ExitcodeBifunctor f e a -> f (ExitcodeBifunctor f e a)
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE getExitcodeBifunctor #-}
instance GetExitcodeBifunctor (Exitcode e f a) f e a where
getExitcodeBifunctor :: Getter (Exitcode e f a) (ExitcodeBifunctor f e a)
getExitcodeBifunctor = (Exitcode e f a -> ExitcodeBifunctor f e a)
-> (Exitcode e f a -> ExitcodeBifunctor f e a -> Exitcode e f a)
-> Lens
(Exitcode e f a)
(Exitcode e f a)
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor (\Exitcode e f a
_ (ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x)
{-# INLINE getExitcodeBifunctor #-}
class (GetExitcodeBifunctor s f e a) => HasExitcodeBifunctor s f e a | s -> f e a where
exitcodeBifunctor :: Lens' s (ExitcodeBifunctor f e a)
instance HasExitcodeBifunctor (ExitcodeBifunctor f e a) f e a where
exitcodeBifunctor :: Lens' (ExitcodeBifunctor f e a) (ExitcodeBifunctor f e a)
exitcodeBifunctor = (ExitcodeBifunctor f e a -> f (ExitcodeBifunctor f e a))
-> ExitcodeBifunctor f e a -> f (ExitcodeBifunctor f e a)
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE exitcodeBifunctor #-}
instance HasExitcodeBifunctor (Exitcode e f a) f e a where
exitcodeBifunctor :: Lens' (Exitcode e f a) (ExitcodeBifunctor f e a)
exitcodeBifunctor = (Exitcode e f a -> ExitcodeBifunctor f e a)
-> (Exitcode e f a -> ExitcodeBifunctor f e a -> Exitcode e f a)
-> Lens' (Exitcode e f a) (ExitcodeBifunctor f e a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor (\Exitcode e f a
_ (ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x)
{-# INLINE exitcodeBifunctor #-}
class ReviewExitcodeBifunctor t f e a | t -> f e a where
reviewExitcodeBifunctor :: Review t (ExitcodeBifunctor f e a)
instance ReviewExitcodeBifunctor (ExitcodeBifunctor f e a) f e a where
reviewExitcodeBifunctor :: Review (ExitcodeBifunctor f e a) (ExitcodeBifunctor f e a)
reviewExitcodeBifunctor = (ExitcodeBifunctor f e a -> ExitcodeBifunctor f e a)
-> Optic
p
f
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
forall (p :: * -> * -> *) (f :: * -> *) b t s a.
(Profunctor p, Bifunctor p, Functor f) =>
(b -> t) -> Optic p f s t a b
unto ExitcodeBifunctor f e a -> ExitcodeBifunctor f e a
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE reviewExitcodeBifunctor #-}
instance ReviewExitcodeBifunctor (Exitcode e f a) f e a where
reviewExitcodeBifunctor :: Review (Exitcode e f a) (ExitcodeBifunctor f e a)
reviewExitcodeBifunctor = (ExitcodeBifunctor f e a -> Exitcode e f a)
-> Optic
p
f
(Exitcode e f a)
(Exitcode e f a)
(ExitcodeBifunctor f e a)
(ExitcodeBifunctor f e a)
forall (p :: * -> * -> *) (f :: * -> *) b t s a.
(Profunctor p, Bifunctor p, Functor f) =>
(b -> t) -> Optic p f s t a b
unto (\(ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x)
{-# INLINE reviewExitcodeBifunctor #-}
class (ReviewExitcodeBifunctor t f e a) => AsExitcodeBifunctor t f e a | t -> f e a where
_ExitcodeBifunctor :: Prism' t (ExitcodeBifunctor f e a)
instance AsExitcodeBifunctor (ExitcodeBifunctor f e a) f e a where
_ExitcodeBifunctor :: Prism' (ExitcodeBifunctor f e a) (ExitcodeBifunctor f e a)
_ExitcodeBifunctor = p (ExitcodeBifunctor f e a) (f (ExitcodeBifunctor f e a))
-> p (ExitcodeBifunctor f e a) (f (ExitcodeBifunctor f e a))
forall a. a -> a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
{-# INLINE _ExitcodeBifunctor #-}
instance AsExitcodeBifunctor (Exitcode e f a) f e a where
_ExitcodeBifunctor :: Prism' (Exitcode e f a) (ExitcodeBifunctor f e a)
_ExitcodeBifunctor = (ExitcodeBifunctor f e a -> Exitcode e f a)
-> (Exitcode e f a -> Maybe (ExitcodeBifunctor f e a))
-> Prism' (Exitcode e f a) (ExitcodeBifunctor f e a)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' (\(ExitcodeBifunctor Exitcode e f a
x) -> Exitcode e f a
x) (ExitcodeBifunctor f e a -> Maybe (ExitcodeBifunctor f e a)
forall a. a -> Maybe a
Just (ExitcodeBifunctor f e a -> Maybe (ExitcodeBifunctor f e a))
-> (Exitcode e f a -> ExitcodeBifunctor f e a)
-> Exitcode e f a
-> Maybe (ExitcodeBifunctor f e a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Exitcode e f a -> ExitcodeBifunctor f e a
forall (f :: * -> *) e a. Exitcode e f a -> ExitcodeBifunctor f e a
ExitcodeBifunctor)
{-# INLINE _ExitcodeBifunctor #-}