module Cooked.MockChain.UtxoSearch
(
UtxoSearch,
beginSearch,
beginSearchP,
UtxoSearchResult,
getOutputs,
getOutputsAndExtracts,
getExtracts,
getTxOutRefs,
getTxOutRefsAndOutputs,
utxosAtSearch,
allUtxosSearch,
txSkelOutByRefSearch,
txSkelOutByRefSearch',
extract,
extractPure,
extractAFold,
extractTotal,
extractPureTotal,
extractGetter,
ensure,
ensurePure,
ensureAFoldIs,
ensureAFoldIsn't,
ensureOnlyValueOutputs,
ensureVanillaOutputs,
ensureProperReferenceScript,
)
where
import Control.Monad (filterM, forM)
import Cooked.Families hiding (Member)
import Cooked.MockChain.Common
import Cooked.MockChain.Read
import Cooked.Skeleton.Datum
import Cooked.Skeleton.Output
import Cooked.Skeleton.Value
import Data.Functor
import Data.Maybe
import Optics.Core
import Optics.Core.Extras
import Plutus.Script.Utils.Address qualified as Script
import Plutus.Script.Utils.Scripts qualified as Script
import PlutusLedgerApi.V3 qualified as Api
import Polysemy
type UtxoSearchResult elems = [(Api.TxOutRef, HList (TxSkelOut ': elems))]
type UtxoSearch effs elems = Sem effs (UtxoSearchResult elems)
beginSearch ::
Sem effs Utxos ->
UtxoSearch effs '[]
beginSearch :: forall (effs :: EffectRow). Sem effs Utxos -> UtxoSearch effs '[]
beginSearch = (Utxos -> UtxoSearchResult '[])
-> Sem effs Utxos -> Sem effs (UtxoSearchResult '[])
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Utxo -> (TxOutRef, HList '[TxSkelOut]))
-> Utxos -> UtxoSearchResult '[]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((TxSkelOut -> HList '[TxSkelOut])
-> Utxo -> (TxOutRef, HList '[TxSkelOut])
forall a b. (a -> b) -> (TxOutRef, a) -> (TxOutRef, b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (TxSkelOut -> HList '[] -> HList '[TxSkelOut]
forall a1 (l :: [*]). a1 -> HList l -> HList (a1 : l)
`HCons` HList '[]
HEmpty)))
beginSearchP ::
Utxos ->
UtxoSearch effs '[]
beginSearchP :: forall (effs :: EffectRow). Utxos -> UtxoSearch effs '[]
beginSearchP = Sem effs Utxos -> UtxoSearch effs '[]
forall (effs :: EffectRow). Sem effs Utxos -> UtxoSearch effs '[]
beginSearch (Sem effs Utxos -> UtxoSearch effs '[])
-> (Utxos -> Sem effs Utxos) -> Utxos -> UtxoSearch effs '[]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Utxos -> Sem effs Utxos
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return
getOutputs ::
Sem effs (UtxoSearchResult elems) ->
Sem effs [TxSkelOut]
getOutputs :: forall (effs :: EffectRow) (elems :: [*]).
Sem effs (UtxoSearchResult elems) -> Sem effs [TxSkelOut]
getOutputs = (UtxoSearchResult elems -> [TxSkelOut])
-> Sem effs (UtxoSearchResult elems) -> Sem effs [TxSkelOut]
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((TxOutRef, HList (TxSkelOut : elems)) -> TxSkelOut)
-> UtxoSearchResult elems -> [TxSkelOut]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (HList (TxSkelOut : elems) -> TxSkelOut
forall a (l :: [*]). HList (a : l) -> a
hHead (HList (TxSkelOut : elems) -> TxSkelOut)
-> ((TxOutRef, HList (TxSkelOut : elems))
-> HList (TxSkelOut : elems))
-> (TxOutRef, HList (TxSkelOut : elems))
-> TxSkelOut
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxOutRef, HList (TxSkelOut : elems)) -> HList (TxSkelOut : elems)
forall a b. (a, b) -> b
snd))
getOutputsAndExtracts ::
Sem effs (UtxoSearchResult elems) ->
Sem effs [(TxSkelOut, HList elems)]
getOutputsAndExtracts :: forall (effs :: EffectRow) (elems :: [*]).
Sem effs (UtxoSearchResult elems)
-> Sem effs [(TxSkelOut, HList elems)]
getOutputsAndExtracts =
(UtxoSearchResult elems -> [(TxSkelOut, HList elems)])
-> Sem effs (UtxoSearchResult elems)
-> Sem effs [(TxSkelOut, HList elems)]
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((TxOutRef, HList (TxSkelOut : elems)) -> (TxSkelOut, HList elems))
-> UtxoSearchResult elems -> [(TxSkelOut, HList elems)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(TxOutRef
_, HCons a1
output HList l
l) -> (a1
TxSkelOut
output, HList elems
HList l
l)))
getExtracts ::
Sem effs (UtxoSearchResult elems) ->
Sem effs [HList elems]
= (UtxoSearchResult elems -> [HList elems])
-> Sem effs (UtxoSearchResult elems) -> Sem effs [HList elems]
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((TxOutRef, HList (TxSkelOut : elems)) -> HList elems)
-> UtxoSearchResult elems -> [HList elems]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (HList (TxSkelOut : elems) -> HList elems
forall a (l :: [*]). HList (a : l) -> HList l
hTail (HList (TxSkelOut : elems) -> HList elems)
-> ((TxOutRef, HList (TxSkelOut : elems))
-> HList (TxSkelOut : elems))
-> (TxOutRef, HList (TxSkelOut : elems))
-> HList elems
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxOutRef, HList (TxSkelOut : elems)) -> HList (TxSkelOut : elems)
forall a b. (a, b) -> b
snd))
getTxOutRefs ::
Sem effs (UtxoSearchResult elems) ->
Sem effs [Api.TxOutRef]
getTxOutRefs :: forall (effs :: EffectRow) (elems :: [*]).
Sem effs (UtxoSearchResult elems) -> Sem effs [TxOutRef]
getTxOutRefs = (UtxoSearchResult elems -> [TxOutRef])
-> Sem effs (UtxoSearchResult elems) -> Sem effs [TxOutRef]
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((TxOutRef, HList (TxSkelOut : elems)) -> TxOutRef)
-> UtxoSearchResult elems -> [TxOutRef]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (TxOutRef, HList (TxSkelOut : elems)) -> TxOutRef
forall a b. (a, b) -> a
fst)
getTxOutRefsAndOutputs ::
Sem effs (UtxoSearchResult elems) ->
Sem effs Utxos
getTxOutRefsAndOutputs :: forall (effs :: EffectRow) (elems :: [*]).
Sem effs (UtxoSearchResult elems) -> Sem effs Utxos
getTxOutRefsAndOutputs = (UtxoSearchResult elems -> Utxos)
-> Sem effs (UtxoSearchResult elems) -> Sem effs Utxos
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((TxOutRef, HList (TxSkelOut : elems)) -> Utxo)
-> UtxoSearchResult elems -> Utxos
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(TxOutRef
oRef, HCons a1
output HList l
_) -> (TxOutRef
oRef, a1
TxSkelOut
output)))
utxosAtSearch ::
(Member MockChainRead effs, Script.ToCredential pkh) =>
pkh ->
(UtxoSearch effs '[] -> UtxoSearch effs els) ->
UtxoSearch effs els
utxosAtSearch :: forall (effs :: EffectRow) pkh (els :: [*]).
(Member MockChainRead effs, ToCredential pkh) =>
pkh
-> (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs els
utxosAtSearch pkh
pkh UtxoSearch effs '[] -> UtxoSearch effs els
filters = UtxoSearch effs '[] -> UtxoSearch effs els
filters (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs '[] -> UtxoSearch effs els
forall a b. (a -> b) -> a -> b
$ Sem effs Utxos -> UtxoSearch effs '[]
forall (effs :: EffectRow). Sem effs Utxos -> UtxoSearch effs '[]
beginSearch (Sem effs Utxos -> UtxoSearch effs '[])
-> Sem effs Utxos -> UtxoSearch effs '[]
forall a b. (a -> b) -> a -> b
$ pkh -> Sem effs Utxos
forall (effs :: EffectRow) cred.
(Member MockChainRead effs, ToCredential cred) =>
cred -> Sem effs Utxos
utxosAt pkh
pkh
allUtxosSearch ::
(Member MockChainRead effs) =>
(UtxoSearch effs '[] -> UtxoSearch effs els) ->
UtxoSearch effs els
allUtxosSearch :: forall (effs :: EffectRow) (els :: [*]).
Member MockChainRead effs =>
(UtxoSearch effs '[] -> UtxoSearch effs els) -> UtxoSearch effs els
allUtxosSearch UtxoSearch effs '[] -> UtxoSearch effs els
filters = UtxoSearch effs '[] -> UtxoSearch effs els
filters (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs '[] -> UtxoSearch effs els
forall a b. (a -> b) -> a -> b
$ Sem effs Utxos -> UtxoSearch effs '[]
forall (effs :: EffectRow). Sem effs Utxos -> UtxoSearch effs '[]
beginSearch Sem effs Utxos
forall (effs :: EffectRow).
Member MockChainRead effs =>
Sem effs Utxos
allUtxos
txSkelOutByRefSearch ::
(Member MockChainRead effs) =>
[Api.TxOutRef] ->
(UtxoSearch effs '[] -> UtxoSearch effs els) ->
UtxoSearch effs els
txSkelOutByRefSearch :: forall (effs :: EffectRow) (els :: [*]).
Member MockChainRead effs =>
[TxOutRef]
-> (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs els
txSkelOutByRefSearch [TxOutRef]
utxos UtxoSearch effs '[] -> UtxoSearch effs els
filters =
UtxoSearch effs '[] -> UtxoSearch effs els
filters (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs '[] -> UtxoSearch effs els
forall a b. (a -> b) -> a -> b
$ Sem effs Utxos -> UtxoSearch effs '[]
forall (effs :: EffectRow). Sem effs Utxos -> UtxoSearch effs '[]
beginSearch ([TxOutRef] -> [TxSkelOut] -> Utxos
forall a b. [a] -> [b] -> [(a, b)]
zip [TxOutRef]
utxos ([TxSkelOut] -> Utxos) -> Sem effs [TxSkelOut] -> Sem effs Utxos
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (TxOutRef -> Sem effs TxSkelOut)
-> [TxOutRef] -> Sem effs [TxSkelOut]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM TxOutRef -> Sem effs TxSkelOut
forall (effs :: EffectRow).
Member MockChainRead effs =>
TxOutRef -> Sem effs TxSkelOut
txSkelOutByRef [TxOutRef]
utxos)
txSkelOutByRefSearch' ::
(Member MockChainRead effs) =>
[Api.TxOutRef] ->
UtxoSearch effs '[]
txSkelOutByRefSearch' :: forall (effs :: EffectRow).
Member MockChainRead effs =>
[TxOutRef] -> UtxoSearch effs '[]
txSkelOutByRefSearch' = ([TxOutRef]
-> (UtxoSearch effs '[] -> UtxoSearch effs '[])
-> UtxoSearch effs '[]
forall (effs :: EffectRow) (els :: [*]).
Member MockChainRead effs =>
[TxOutRef]
-> (UtxoSearch effs '[] -> UtxoSearch effs els)
-> UtxoSearch effs els
`txSkelOutByRefSearch` UtxoSearch effs '[] -> UtxoSearch effs '[]
forall a. a -> a
id)
extract ::
(TxSkelOut -> Sem effs (Maybe b)) ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
TxSkelOut -> Sem effs (Maybe b)
extractFun UtxoSearch effs els
comp = do
UtxoSearchResult els
resl <- UtxoSearch effs els
comp
[Maybe (TxOutRef, HList (TxSkelOut : b : els))]
resl' <- UtxoSearchResult els
-> ((TxOutRef, HList (TxSkelOut : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els))))
-> Sem effs [Maybe (TxOutRef, HList (TxSkelOut : b : els))]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM UtxoSearchResult els
resl (((TxOutRef, HList (TxSkelOut : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els))))
-> Sem effs [Maybe (TxOutRef, HList (TxSkelOut : b : els))])
-> ((TxOutRef, HList (TxSkelOut : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els))))
-> Sem effs [Maybe (TxOutRef, HList (TxSkelOut : b : els))]
forall a b. (a -> b) -> a -> b
$
\(TxOutRef
oRef, HCons a1
txSkelOut HList l
other) -> do
Maybe b
res <- TxSkelOut -> Sem effs (Maybe b)
extractFun a1
TxSkelOut
txSkelOut
Maybe (TxOutRef, HList (TxSkelOut : b : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els)))
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (TxOutRef, HList (TxSkelOut : b : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els))))
-> Maybe (TxOutRef, HList (TxSkelOut : b : els))
-> Sem effs (Maybe (TxOutRef, HList (TxSkelOut : b : els)))
forall a b. (a -> b) -> a -> b
$ Maybe b
res Maybe b
-> (b -> (TxOutRef, HList (a1 : b : l)))
-> Maybe (TxOutRef, HList (a1 : b : l))
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (\b
x -> (TxOutRef
oRef, a1 -> HList (b : l) -> HList (a1 : b : l)
forall a1 (l :: [*]). a1 -> HList l -> HList (a1 : l)
HCons a1
txSkelOut (b -> HList l -> HList (b : l)
forall a1 (l :: [*]). a1 -> HList l -> HList (a1 : l)
HCons b
x HList l
other)))
UtxoSearchResult (b : els) -> UtxoSearch effs (b : els)
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return (UtxoSearchResult (b : els) -> UtxoSearch effs (b : els))
-> UtxoSearchResult (b : els) -> UtxoSearch effs (b : els)
forall a b. (a -> b) -> a -> b
$ [Maybe (TxOutRef, HList (TxSkelOut : b : els))]
-> UtxoSearchResult (b : els)
forall a. [Maybe a] -> [a]
catMaybes [Maybe (TxOutRef, HList (TxSkelOut : b : els))]
resl'
extractPure ::
(TxSkelOut -> Maybe b) ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
= (TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
forall (effs :: EffectRow) b (els :: [*]).
(TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
extract ((TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els))
-> ((TxSkelOut -> Maybe b) -> TxSkelOut -> Sem effs (Maybe b))
-> (TxSkelOut -> Maybe b)
-> UtxoSearch effs els
-> UtxoSearch effs (b : els)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe b -> Sem effs (Maybe b)
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe b -> Sem effs (Maybe b))
-> (TxSkelOut -> Maybe b) -> TxSkelOut -> Sem effs (Maybe b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
extractAFold ::
(Is k An_AffineFold) =>
Optic' k is TxSkelOut b ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
= (TxSkelOut -> Maybe b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
forall b (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Maybe b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
extractPure ((TxSkelOut -> Maybe b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els))
-> (Optic' k is TxSkelOut b -> TxSkelOut -> Maybe b)
-> Optic' k is TxSkelOut b
-> UtxoSearch effs els
-> UtxoSearch effs (b : els)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' k is TxSkelOut b -> TxSkelOut -> Maybe b
forall k (is :: [*]) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview
extractTotal ::
(TxSkelOut -> Sem effs b) ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
= (TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
forall (effs :: EffectRow) b (els :: [*]).
(TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
extract ((TxSkelOut -> Sem effs (Maybe b))
-> UtxoSearch effs els -> UtxoSearch effs (b : els))
-> ((TxSkelOut -> Sem effs b) -> TxSkelOut -> Sem effs (Maybe b))
-> (TxSkelOut -> Sem effs b)
-> UtxoSearch effs els
-> UtxoSearch effs (b : els)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((b -> Maybe b) -> Sem effs b -> Sem effs (Maybe b)
forall a b. (a -> b) -> Sem effs a -> Sem effs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap b -> Maybe b
forall a. a -> Maybe a
Just (Sem effs b -> Sem effs (Maybe b))
-> (TxSkelOut -> Sem effs b) -> TxSkelOut -> Sem effs (Maybe b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
extractPureTotal ::
(TxSkelOut -> b) ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
= (TxSkelOut -> Sem effs b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
forall (effs :: EffectRow) b (els :: [*]).
(TxSkelOut -> Sem effs b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
extractTotal ((TxSkelOut -> Sem effs b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els))
-> ((TxSkelOut -> b) -> TxSkelOut -> Sem effs b)
-> (TxSkelOut -> b)
-> UtxoSearch effs els
-> UtxoSearch effs (b : els)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (b -> Sem effs b
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> Sem effs b) -> (TxSkelOut -> b) -> TxSkelOut -> Sem effs b
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
extractGetter ::
(Is k A_Getter) =>
Optic' k is TxSkelOut b ->
UtxoSearch effs els ->
UtxoSearch effs (b ': els)
= (TxSkelOut -> b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
forall b (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els)
extractPureTotal ((TxSkelOut -> b)
-> UtxoSearch effs els -> UtxoSearch effs (b : els))
-> (Optic' k is TxSkelOut b -> TxSkelOut -> b)
-> Optic' k is TxSkelOut b
-> UtxoSearch effs els
-> UtxoSearch effs (b : els)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' k is TxSkelOut b -> TxSkelOut -> b
forall k (is :: [*]) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view
ensure ::
(TxSkelOut -> Sem effs Bool) ->
UtxoSearch effs els ->
UtxoSearch effs els
ensure :: forall (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Sem effs Bool)
-> UtxoSearch effs els -> UtxoSearch effs els
ensure TxSkelOut -> Sem effs Bool
filterF UtxoSearch effs els
comp =
UtxoSearch effs els
comp UtxoSearch effs els
-> (UtxoSearchResult els -> UtxoSearch effs els)
-> UtxoSearch effs els
forall a b. Sem effs a -> (a -> Sem effs b) -> Sem effs b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ((TxOutRef, HList (TxSkelOut : els)) -> Sem effs Bool)
-> UtxoSearchResult els -> UtxoSearch effs els
forall (m :: * -> *) a.
Applicative m =>
(a -> m Bool) -> [a] -> m [a]
filterM (TxSkelOut -> Sem effs Bool
filterF (TxSkelOut -> Sem effs Bool)
-> ((TxOutRef, HList (TxSkelOut : els)) -> TxSkelOut)
-> (TxOutRef, HList (TxSkelOut : els))
-> Sem effs Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HList (TxSkelOut : els) -> TxSkelOut
forall a (l :: [*]). HList (a : l) -> a
hHead (HList (TxSkelOut : els) -> TxSkelOut)
-> ((TxOutRef, HList (TxSkelOut : els)) -> HList (TxSkelOut : els))
-> (TxOutRef, HList (TxSkelOut : els))
-> TxSkelOut
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxOutRef, HList (TxSkelOut : els)) -> HList (TxSkelOut : els)
forall a b. (a, b) -> b
snd)
ensurePure ::
(TxSkelOut -> Bool) ->
UtxoSearch effs els ->
UtxoSearch effs els
ensurePure :: forall (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els
ensurePure = (TxSkelOut -> Sem effs Bool)
-> UtxoSearch effs els -> UtxoSearch effs els
forall (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Sem effs Bool)
-> UtxoSearch effs els -> UtxoSearch effs els
ensure ((TxSkelOut -> Sem effs Bool)
-> UtxoSearch effs els -> UtxoSearch effs els)
-> ((TxSkelOut -> Bool) -> TxSkelOut -> Sem effs Bool)
-> (TxSkelOut -> Bool)
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> Sem effs Bool
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool -> Sem effs Bool)
-> (TxSkelOut -> Bool) -> TxSkelOut -> Sem effs Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
ensureAFoldIs ::
(Is k An_AffineFold) =>
Optic' k is TxSkelOut b ->
UtxoSearch effs els ->
UtxoSearch effs els
ensureAFoldIs :: forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIs = (TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els
forall (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els
ensurePure ((TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els)
-> (Optic' k is TxSkelOut b -> TxSkelOut -> Bool)
-> Optic' k is TxSkelOut b
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' k is TxSkelOut b -> TxSkelOut -> Bool
forall k (is :: [*]) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Bool
is
ensureAFoldIsn't ::
(Is k An_AffineFold) =>
Optic' k is TxSkelOut b ->
UtxoSearch effs els ->
UtxoSearch effs els
ensureAFoldIsn't :: forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIsn't = (TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els
forall (effs :: EffectRow) (els :: [*]).
(TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els
ensurePure ((TxSkelOut -> Bool) -> UtxoSearch effs els -> UtxoSearch effs els)
-> (Optic' k is TxSkelOut b -> TxSkelOut -> Bool)
-> Optic' k is TxSkelOut b
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' k is TxSkelOut b -> TxSkelOut -> Bool
forall k (is :: [*]) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Bool
isn't
ensureOnlyValueOutputs ::
UtxoSearch effs els ->
UtxoSearch effs els
ensureOnlyValueOutputs :: forall (effs :: EffectRow) (els :: [*]).
UtxoSearch effs els -> UtxoSearch effs els
ensureOnlyValueOutputs =
Optic' An_AffineTraversal '[] TxSkelOut VScript
-> UtxoSearch effs els -> UtxoSearch effs els
forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIsn't Optic' An_AffineTraversal '[] TxSkelOut VScript
txSkelOutReferenceScriptAT
(UtxoSearch effs els -> UtxoSearch effs els)
-> (UtxoSearch effs els -> UtxoSearch effs els)
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' An_AffineTraversal '[] TxSkelOut StakingCredential
-> UtxoSearch effs els -> UtxoSearch effs els
forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIsn't Optic' An_AffineTraversal '[] TxSkelOut StakingCredential
txSkelOutStakingCredentialAT
(UtxoSearch effs els -> UtxoSearch effs els)
-> (UtxoSearch effs els -> UtxoSearch effs els)
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' An_AffineTraversal '[] TxSkelOut DatumKind
-> UtxoSearch effs els -> UtxoSearch effs els
forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIsn't (Lens' TxSkelOut TxSkelOutDatum
txSkelOutDatumL Lens' TxSkelOut TxSkelOutDatum
-> Optic
An_AffineTraversal
'[]
TxSkelOutDatum
TxSkelOutDatum
DatumKind
DatumKind
-> Optic' An_AffineTraversal '[] TxSkelOut DatumKind
forall k l m (is :: [*]) (js :: [*]) (ks :: [*]) s t u v a b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
An_AffineTraversal
'[]
TxSkelOutDatum
TxSkelOutDatum
DatumKind
DatumKind
txSkelOutDatumKindAT)
ensureVanillaOutputs ::
UtxoSearch effs els ->
UtxoSearch effs els
ensureVanillaOutputs :: forall (effs :: EffectRow) (els :: [*]).
UtxoSearch effs els -> UtxoSearch effs els
ensureVanillaOutputs =
Optic' An_AffineTraversal '[] TxSkelOut Lovelace
-> UtxoSearch effs els -> UtxoSearch effs els
forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIs (Lens' TxSkelOut Value
txSkelOutValueL Lens' TxSkelOut Value
-> Optic A_Prism '[] Value Value Lovelace Lovelace
-> Optic' An_AffineTraversal '[] TxSkelOut Lovelace
forall k l m (is :: [*]) (js :: [*]) (ks :: [*]) s t u v a b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic A_Prism '[] Value Value Lovelace Lovelace
valueLovelaceP)
(UtxoSearch effs els -> UtxoSearch effs els)
-> (UtxoSearch effs els -> UtxoSearch effs els)
-> UtxoSearch effs els
-> UtxoSearch effs els
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UtxoSearch effs els -> UtxoSearch effs els
forall (effs :: EffectRow) (els :: [*]).
UtxoSearch effs els -> UtxoSearch effs els
ensureOnlyValueOutputs
ensureProperReferenceScript ::
(Script.ToScriptHash s) =>
s ->
UtxoSearch effs els ->
UtxoSearch effs els
ensureProperReferenceScript :: forall s (effs :: EffectRow) (els :: [*]).
ToScriptHash s =>
s -> UtxoSearch effs els -> UtxoSearch effs els
ensureProperReferenceScript (s -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
Script.toScriptHash -> ScriptHash
sHash) =
Optic' An_AffineFold '[] TxSkelOut ScriptHash
-> UtxoSearch effs els -> UtxoSearch effs els
forall k (is :: [*]) b (effs :: EffectRow) (els :: [*]).
Is k An_AffineFold =>
Optic' k is TxSkelOut b
-> UtxoSearch effs els -> UtxoSearch effs els
ensureAFoldIs (Optic' An_AffineFold '[] TxSkelOut ScriptHash
txSkelOutReferenceScriptHashAF Optic' An_AffineFold '[] TxSkelOut ScriptHash
-> Optic
An_AffineFold '[] ScriptHash ScriptHash ScriptHash ScriptHash
-> Optic' An_AffineFold '[] TxSkelOut ScriptHash
forall k l m (is :: [*]) (js :: [*]) (ks :: [*]) s t u v a b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% (ScriptHash -> Bool)
-> Optic
An_AffineFold '[] ScriptHash ScriptHash ScriptHash ScriptHash
forall a. (a -> Bool) -> AffineFold a a
filtered (ScriptHash -> ScriptHash -> Bool
forall a. Eq a => a -> a -> Bool
== ScriptHash
sHash))