{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ImplicitPrelude #-}

module PlutusLedgerApi.Test.ScriptContextBuilder.Lenses
  ( scriptContextTxInfoL
  , scriptContextRedeemerL
  , scriptContextScriptInfoL
  , txInfoInputsL
  , txInfoMintL
  , txInfoSignatoriesL
  , txInfoOutputsL
  , txInfoValidRangeL
  , txInfoRedeemersL
  , txInfoRedeemersAssocL
  , txInfoFeeL
  , txInfoWdrlL
  , txInfoVotesL
  , txInfoTxCertsL
  , txInfoTreasuryDonationL
  , txInfoReferenceInputsL
  , txInfoProposalProceduresL
  , txInfoIdL
  , txInfoDataL
  , txInfoCurrentTreasuryAmountL
  , txInInfoOutRefL
  , txInInfoResolvedL
  , txOutRefIdL
  , txOutRefIdxL
  , txOutAddressL
  , txOutValueL
  , txOutDatumL
  , txOutReferenceScriptL
  , addressCredentialL
  , addressStakingCredentialL
  , mintValueMapL
  , valueMapL
  , ivFromL
  , ivToL
  , lowerBoundExtendedL
  , lowerBoundClosureL
  , upperBoundExtendedL
  , upperBoundClosureL
  , _NegInf
  , _Finite
  , _PosInf
  , _NoOutputDatum
  , _OutputDatumHash
  , _OutputDatum
  , _Datum
  , _Redeemer
  )
where

import Control.Lens qualified as L
import Data.List (sortBy)
import Data.Map (Map)
import Data.Map qualified as Map
import Data.Ord (comparing)
import PlutusLedgerApi.Test.ScriptContextBuilder.Lenses.TH (makeLensesWithL)
import PlutusLedgerApi.V1 qualified as PV1
import PlutusLedgerApi.V3
  ( OutputDatum
  , ScriptContext
  , TxInInfo
  , TxInfo
  , TxOut
  , TxOutRef
  )
import PlutusLedgerApi.V3 qualified as PV3
import PlutusLedgerApi.V3.MintValue
import PlutusTx.AssocMap qualified as AssocMap
import PlutusTx.Prelude qualified as PlutusTx

makeLensesWithL ''ScriptContext

L.makeLensesFor
  [ ("txInfoInputs", "txInfoInputsL")
  , ("txInfoMint", "txInfoMintL")
  , ("txInfoSignatories", "txInfoSignatoriesL")
  , ("txInfoOutputs", "txInfoOutputsL")
  , ("txInfoValidRange", "txInfoValidRangeL")
  , ("txInfoFee", "txInfoFeeL")
  , ("txInfoWdrl", "txInfoWdrlL")
  , ("txInfoVotes", "txInfoVotesL")
  , ("txInfoTxCerts", "txInfoTxCertsL")
  , ("txInfoTreasuryDonation", "txInfoTreasuryDonationL")
  , ("txInfoReferenceInputs", "txInfoReferenceInputsL")
  , ("txInfoProposalProcedures", "txInfoProposalProceduresL")
  , ("txInfoId", "txInfoIdL")
  , ("txInfoData", "txInfoDataL")
  , ("txInfoCurrentTreasuryAmount", "txInfoCurrentTreasuryAmountL")
  ]
  ''TxInfo

makeLensesWithL ''TxInInfo

makeLensesWithL ''TxOutRef

makeLensesWithL ''TxOut

makeLensesWithL ''PV1.Address

L.makePrisms ''PV1.Credential
L.makePrisms ''PV1.StakingCredential
L.makePrisms ''OutputDatum

makeLensesWithL ''PV1.Interval

L.makePrisms ''PV1.Extended

_Datum :: forall a. (PV1.FromData a, PV1.ToData a) => L.Prism' PV1.Datum a
_Datum :: forall a. (FromData a, ToData a) => Prism' Datum a
_Datum = (a -> Datum) -> (Datum -> Maybe a) -> Prism Datum Datum a a
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
L.prism' a -> Datum
from Datum -> Maybe a
to
  where
    to :: PV1.Datum -> Maybe a
    to :: Datum -> Maybe a
to = BuiltinData -> Maybe a
forall a. FromData a => BuiltinData -> Maybe a
PV1.fromBuiltinData (BuiltinData -> Maybe a)
-> (Datum -> BuiltinData) -> Datum -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Datum -> BuiltinData
PV1.getDatum

    from :: a -> PV1.Datum
    from :: a -> Datum
from = BuiltinData -> Datum
PV1.Datum (BuiltinData -> Datum) -> (a -> BuiltinData) -> a -> Datum
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> BuiltinData
forall a. ToData a => a -> BuiltinData
PV1.toBuiltinData

_Redeemer :: forall a. (PV1.FromData a, PV1.ToData a) => L.Prism' PV1.Redeemer a
_Redeemer :: forall a. (FromData a, ToData a) => Prism' Redeemer a
_Redeemer = (a -> Redeemer)
-> (Redeemer -> Maybe a) -> Prism Redeemer Redeemer a a
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
L.prism' a -> Redeemer
from Redeemer -> Maybe a
to
  where
    to :: PV1.Redeemer -> Maybe a
    to :: Redeemer -> Maybe a
to = BuiltinData -> Maybe a
forall a. FromData a => BuiltinData -> Maybe a
PV1.fromBuiltinData (BuiltinData -> Maybe a)
-> (Redeemer -> BuiltinData) -> Redeemer -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Redeemer -> BuiltinData
PV1.getRedeemer

    from :: a -> PV1.Redeemer
    from :: a -> Redeemer
from = BuiltinData -> Redeemer
PV1.Redeemer (BuiltinData -> Redeemer) -> (a -> BuiltinData) -> a -> Redeemer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> BuiltinData
forall a. ToData a => a -> BuiltinData
PV1.toBuiltinData

txInfoRedeemersL :: L.Lens' PV3.TxInfo (Map PV3.ScriptPurpose PV3.Redeemer)
txInfoRedeemersL :: Lens' TxInfo (Map ScriptPurpose Redeemer)
txInfoRedeemersL = (TxInfo -> Map ScriptPurpose Redeemer)
-> (TxInfo -> Map ScriptPurpose Redeemer -> TxInfo)
-> Lens' TxInfo (Map ScriptPurpose Redeemer)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens TxInfo -> Map ScriptPurpose Redeemer
getter TxInfo -> Map ScriptPurpose Redeemer -> TxInfo
setter
  where
    getter :: TxInfo -> Map ScriptPurpose Redeemer
getter TxInfo
txInfo = [(ScriptPurpose, Redeemer)] -> Map ScriptPurpose Redeemer
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(ScriptPurpose, Redeemer)] -> Map ScriptPurpose Redeemer)
-> [(ScriptPurpose, Redeemer)] -> Map ScriptPurpose Redeemer
forall a b. (a -> b) -> a -> b
$ Map ScriptPurpose Redeemer -> [(ScriptPurpose, Redeemer)]
forall k v. Map k v -> [(k, v)]
AssocMap.toList (Map ScriptPurpose Redeemer -> [(ScriptPurpose, Redeemer)])
-> Map ScriptPurpose Redeemer -> [(ScriptPurpose, Redeemer)]
forall a b. (a -> b) -> a -> b
$ TxInfo -> Map ScriptPurpose Redeemer
PV3.txInfoRedeemers TxInfo
txInfo
    setter :: TxInfo -> Map ScriptPurpose Redeemer -> TxInfo
setter TxInfo
txInfo Map ScriptPurpose Redeemer
redeemerMap =
      TxInfo
txInfo
        { PV3.txInfoRedeemers = AssocMap.unsafeFromList $ Map.toList redeemerMap
        }

-- | Raw lens into redeemers preserving the 'AssocMap' type (no 'Data.Map' conversion).
txInfoRedeemersAssocL :: L.Lens' PV3.TxInfo (AssocMap.Map PV3.ScriptPurpose PV3.Redeemer)
txInfoRedeemersAssocL :: Lens' TxInfo (Map ScriptPurpose Redeemer)
txInfoRedeemersAssocL = (TxInfo -> Map ScriptPurpose Redeemer)
-> (TxInfo -> Map ScriptPurpose Redeemer -> TxInfo)
-> Lens' TxInfo (Map ScriptPurpose Redeemer)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens TxInfo -> Map ScriptPurpose Redeemer
PV3.txInfoRedeemers (\TxInfo
ti Map ScriptPurpose Redeemer
r -> TxInfo
ti {PV3.txInfoRedeemers = r})

mintValueMapL :: L.Lens' MintValue (Map PV1.CurrencySymbol (Map PV1.TokenName Integer))
mintValueMapL :: Lens' MintValue (Map CurrencySymbol (Map TokenName Integer))
mintValueMapL = (MintValue -> Map CurrencySymbol (Map TokenName Integer))
-> (MintValue
    -> Map CurrencySymbol (Map TokenName Integer) -> MintValue)
-> Lens' MintValue (Map CurrencySymbol (Map TokenName Integer))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens MintValue -> Map CurrencySymbol (Map TokenName Integer)
getter MintValue
-> Map CurrencySymbol (Map TokenName Integer) -> MintValue
forall {p}.
p -> Map CurrencySymbol (Map TokenName Integer) -> MintValue
setter
  where
    getter :: MintValue -> Map CurrencySymbol (Map TokenName Integer)
getter MintValue
mp = [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(CurrencySymbol, Map TokenName Integer)]
 -> Map CurrencySymbol (Map TokenName Integer))
-> [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$ Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall k v. Map k v -> [(k, v)]
AssocMap.toList (Map CurrencySymbol (Map TokenName Integer)
 -> [(CurrencySymbol, Map TokenName Integer)])
-> Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$ (Map TokenName Integer -> Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall a b.
(a -> b) -> Map CurrencySymbol a -> Map CurrencySymbol b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
PlutusTx.fmap ([(TokenName, Integer)] -> Map TokenName Integer
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(TokenName, Integer)] -> Map TokenName Integer)
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> Map TokenName Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map TokenName Integer -> [(TokenName, Integer)]
forall k v. Map k v -> [(k, v)]
AssocMap.toList) (Map CurrencySymbol (Map TokenName Integer)
 -> Map CurrencySymbol (Map TokenName Integer))
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$ MintValue -> Map CurrencySymbol (Map TokenName Integer)
mintValueToMap MintValue
mp
    setter :: p -> Map CurrencySymbol (Map TokenName Integer) -> MintValue
setter p
_ Map CurrencySymbol (Map TokenName Integer)
v =
      Map CurrencySymbol (Map TokenName Integer) -> MintValue
UnsafeMintValue (Map CurrencySymbol (Map TokenName Integer) -> MintValue)
-> Map CurrencySymbol (Map TokenName Integer) -> MintValue
forall a b. (a -> b) -> a -> b
$
        [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall k v. [(k, v)] -> Map k v
AssocMap.unsafeFromList ([(CurrencySymbol, Map TokenName Integer)]
 -> Map CurrencySymbol (Map TokenName Integer))
-> [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$
          ((CurrencySymbol, Map TokenName Integer)
 -> (CurrencySymbol, Map TokenName Integer) -> Ordering)
-> [(CurrencySymbol, Map TokenName Integer)]
-> [(CurrencySymbol, Map TokenName Integer)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (((CurrencySymbol, Map TokenName Integer) -> CurrencySymbol)
-> (CurrencySymbol, Map TokenName Integer)
-> (CurrencySymbol, Map TokenName Integer)
-> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (CurrencySymbol, Map TokenName Integer) -> CurrencySymbol
forall a b. (a, b) -> a
fst) ([(CurrencySymbol, Map TokenName Integer)]
 -> [(CurrencySymbol, Map TokenName Integer)])
-> [(CurrencySymbol, Map TokenName Integer)]
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$
            Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall k a. Map k a -> [(k, a)]
Map.toList (Map CurrencySymbol (Map TokenName Integer)
 -> [(CurrencySymbol, Map TokenName Integer)])
-> Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$
              (Map TokenName Integer -> Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall a b.
(a -> b) -> Map CurrencySymbol a -> Map CurrencySymbol b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([(TokenName, Integer)] -> Map TokenName Integer
forall k v. [(k, v)] -> Map k v
AssocMap.unsafeFromList ([(TokenName, Integer)] -> Map TokenName Integer)
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> Map TokenName Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((TokenName, Integer) -> (TokenName, Integer) -> Ordering)
-> [(TokenName, Integer)] -> [(TokenName, Integer)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (((TokenName, Integer) -> TokenName)
-> (TokenName, Integer) -> (TokenName, Integer) -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (TokenName, Integer) -> TokenName
forall a b. (a, b) -> a
fst) ([(TokenName, Integer)] -> [(TokenName, Integer)])
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> [(TokenName, Integer)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map TokenName Integer -> [(TokenName, Integer)]
forall k a. Map k a -> [(k, a)]
Map.toList) Map CurrencySymbol (Map TokenName Integer)
v

valueMapL :: L.Lens' PV1.Value (Map PV1.CurrencySymbol (Map PV1.TokenName Integer))
valueMapL :: Lens' Value (Map CurrencySymbol (Map TokenName Integer))
valueMapL = (Value -> Map CurrencySymbol (Map TokenName Integer))
-> (Value -> Map CurrencySymbol (Map TokenName Integer) -> Value)
-> Lens' Value (Map CurrencySymbol (Map TokenName Integer))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens Value -> Map CurrencySymbol (Map TokenName Integer)
getter Value -> Map CurrencySymbol (Map TokenName Integer) -> Value
forall {p}.
p -> Map CurrencySymbol (Map TokenName Integer) -> Value
setter
  where
    getter :: Value -> Map CurrencySymbol (Map TokenName Integer)
getter Value
mp =
      [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(CurrencySymbol, Map TokenName Integer)]
 -> Map CurrencySymbol (Map TokenName Integer))
-> [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$
        Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall k v. Map k v -> [(k, v)]
AssocMap.toList (Map CurrencySymbol (Map TokenName Integer)
 -> [(CurrencySymbol, Map TokenName Integer)])
-> Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$
          (Map TokenName Integer -> Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall a b.
(a -> b) -> Map CurrencySymbol a -> Map CurrencySymbol b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
PlutusTx.fmap ([(TokenName, Integer)] -> Map TokenName Integer
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(TokenName, Integer)] -> Map TokenName Integer)
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> Map TokenName Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map TokenName Integer -> [(TokenName, Integer)]
forall k v. Map k v -> [(k, v)]
AssocMap.toList) (Map CurrencySymbol (Map TokenName Integer)
 -> Map CurrencySymbol (Map TokenName Integer))
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$
            Value -> Map CurrencySymbol (Map TokenName Integer)
PV1.getValue Value
mp
    setter :: p -> Map CurrencySymbol (Map TokenName Integer) -> Value
setter p
_ Map CurrencySymbol (Map TokenName Integer)
v =
      Map CurrencySymbol (Map TokenName Integer) -> Value
PV1.Value (Map CurrencySymbol (Map TokenName Integer) -> Value)
-> Map CurrencySymbol (Map TokenName Integer) -> Value
forall a b. (a -> b) -> a -> b
$
        [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall k v. [(k, v)] -> Map k v
AssocMap.unsafeFromList ([(CurrencySymbol, Map TokenName Integer)]
 -> Map CurrencySymbol (Map TokenName Integer))
-> [(CurrencySymbol, Map TokenName Integer)]
-> Map CurrencySymbol (Map TokenName Integer)
forall a b. (a -> b) -> a -> b
$
          ((CurrencySymbol, Map TokenName Integer)
 -> (CurrencySymbol, Map TokenName Integer) -> Ordering)
-> [(CurrencySymbol, Map TokenName Integer)]
-> [(CurrencySymbol, Map TokenName Integer)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (((CurrencySymbol, Map TokenName Integer) -> CurrencySymbol)
-> (CurrencySymbol, Map TokenName Integer)
-> (CurrencySymbol, Map TokenName Integer)
-> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (CurrencySymbol, Map TokenName Integer) -> CurrencySymbol
forall a b. (a, b) -> a
fst) ([(CurrencySymbol, Map TokenName Integer)]
 -> [(CurrencySymbol, Map TokenName Integer)])
-> [(CurrencySymbol, Map TokenName Integer)]
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$
            Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall k a. Map k a -> [(k, a)]
Map.toList (Map CurrencySymbol (Map TokenName Integer)
 -> [(CurrencySymbol, Map TokenName Integer)])
-> Map CurrencySymbol (Map TokenName Integer)
-> [(CurrencySymbol, Map TokenName Integer)]
forall a b. (a -> b) -> a -> b
$
              [(TokenName, Integer)] -> Map TokenName Integer
forall k v. [(k, v)] -> Map k v
AssocMap.unsafeFromList ([(TokenName, Integer)] -> Map TokenName Integer)
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> Map TokenName Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((TokenName, Integer) -> (TokenName, Integer) -> Ordering)
-> [(TokenName, Integer)] -> [(TokenName, Integer)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (((TokenName, Integer) -> TokenName)
-> (TokenName, Integer) -> (TokenName, Integer) -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (TokenName, Integer) -> TokenName
forall a b. (a, b) -> a
fst) ([(TokenName, Integer)] -> [(TokenName, Integer)])
-> (Map TokenName Integer -> [(TokenName, Integer)])
-> Map TokenName Integer
-> [(TokenName, Integer)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map TokenName Integer -> [(TokenName, Integer)]
forall k a. Map k a -> [(k, a)]
Map.toList (Map TokenName Integer -> Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
-> Map CurrencySymbol (Map TokenName Integer)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map CurrencySymbol (Map TokenName Integer)
v

lowerBoundExtendedL :: L.Lens' (PV1.LowerBound a) (PV1.Extended a)
lowerBoundExtendedL :: forall a (f :: * -> *).
Functor f =>
(Extended a -> f (Extended a)) -> LowerBound a -> f (LowerBound a)
lowerBoundExtendedL = (LowerBound a -> Extended a)
-> (LowerBound a -> Extended a -> LowerBound a)
-> Lens (LowerBound a) (LowerBound a) (Extended a) (Extended a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens LowerBound a -> Extended a
forall {a}. LowerBound a -> Extended a
getter LowerBound a -> Extended a -> LowerBound a
forall {a} {a}. LowerBound a -> Extended a -> LowerBound a
setter
  where
    getter :: LowerBound a -> Extended a
getter (PV1.LowerBound Extended a
e Closure
_) = Extended a
e
    setter :: LowerBound a -> Extended a -> LowerBound a
setter (PV1.LowerBound Extended a
_ Closure
c) Extended a
e = Extended a -> Closure -> LowerBound a
forall a. Extended a -> Closure -> LowerBound a
PV1.LowerBound Extended a
e Closure
c

lowerBoundClosureL :: L.Lens' (PV1.LowerBound a) PV1.Closure
lowerBoundClosureL :: forall a (f :: * -> *).
Functor f =>
(Closure -> f Closure) -> LowerBound a -> f (LowerBound a)
lowerBoundClosureL = (LowerBound a -> Closure)
-> (LowerBound a -> Closure -> LowerBound a)
-> Lens (LowerBound a) (LowerBound a) Closure Closure
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens LowerBound a -> Closure
forall {a}. LowerBound a -> Closure
getter LowerBound a -> Closure -> LowerBound a
forall {a}. LowerBound a -> Closure -> LowerBound a
setter
  where
    getter :: LowerBound a -> Closure
getter (PV1.LowerBound Extended a
_ Closure
c) = Closure
c
    setter :: LowerBound a -> Closure -> LowerBound a
setter (PV1.LowerBound Extended a
e Closure
_) = Extended a -> Closure -> LowerBound a
forall a. Extended a -> Closure -> LowerBound a
PV1.LowerBound Extended a
e

upperBoundExtendedL :: L.Lens' (PV1.UpperBound a) (PV1.Extended a)
upperBoundExtendedL :: forall a (f :: * -> *).
Functor f =>
(Extended a -> f (Extended a)) -> UpperBound a -> f (UpperBound a)
upperBoundExtendedL = (UpperBound a -> Extended a)
-> (UpperBound a -> Extended a -> UpperBound a)
-> Lens (UpperBound a) (UpperBound a) (Extended a) (Extended a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens UpperBound a -> Extended a
forall {a}. UpperBound a -> Extended a
getter UpperBound a -> Extended a -> UpperBound a
forall {a} {a}. UpperBound a -> Extended a -> UpperBound a
setter
  where
    getter :: UpperBound a -> Extended a
getter (PV1.UpperBound Extended a
e Closure
_) = Extended a
e
    setter :: UpperBound a -> Extended a -> UpperBound a
setter (PV1.UpperBound Extended a
_ Closure
c) Extended a
e = Extended a -> Closure -> UpperBound a
forall a. Extended a -> Closure -> UpperBound a
PV1.UpperBound Extended a
e Closure
c

upperBoundClosureL :: L.Lens' (PV1.UpperBound a) PV1.Closure
upperBoundClosureL :: forall a (f :: * -> *).
Functor f =>
(Closure -> f Closure) -> UpperBound a -> f (UpperBound a)
upperBoundClosureL = (UpperBound a -> Closure)
-> (UpperBound a -> Closure -> UpperBound a)
-> Lens (UpperBound a) (UpperBound a) Closure Closure
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
L.lens UpperBound a -> Closure
forall {a}. UpperBound a -> Closure
getter UpperBound a -> Closure -> UpperBound a
forall {a}. UpperBound a -> Closure -> UpperBound a
setter
  where
    getter :: UpperBound a -> Closure
getter (PV1.UpperBound Extended a
_ Closure
c) = Closure
c
    setter :: UpperBound a -> Closure -> UpperBound a
setter (PV1.UpperBound Extended a
e Closure
_) = Extended a -> Closure -> UpperBound a
forall a. Extended a -> Closure -> UpperBound a
PV1.UpperBound Extended a
e