module UntypedPlutusCore.Mark
( markNonFreshTerm
, markNonFreshProgram
) where
import Data.Set.Lens (setOf)
import PlutusCore.Core (HasUniques)
import PlutusCore.Name.Unique
import PlutusCore.Quote
import UntypedPlutusCore.Core
markNonFreshTerm
:: (HasUniques (Term name uni fun ann), MonadQuote m)
=> Term name uni fun ann -> m ()
markNonFreshTerm :: forall name (uni :: * -> *) fun ann (m :: * -> *).
(HasUniques (Term name uni fun ann), MonadQuote m) =>
Term name uni fun ann -> m ()
markNonFreshTerm = Set Unique -> m ()
forall (m :: * -> *). MonadQuote m => Set Unique -> m ()
markNonFreshMax (Set Unique -> m ())
-> (Term name uni fun ann -> Set Unique)
-> Term name uni fun ann
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting (Set Unique) (Term name uni fun ann) Unique
-> Term name uni fun ann -> Set Unique
forall a s. Getting (Set a) s a -> s -> Set a
setOf Getting (Set Unique) (Term name uni fun ann) Unique
forall name (uni :: * -> *) fun ann.
HasUniques (Term name uni fun ann) =>
Fold (Term name uni fun ann) Unique
Fold (Term name uni fun ann) Unique
termUniquesDeep
markNonFreshProgram
:: (HasUnique name TermUnique, MonadQuote m)
=> Program name uni fun ann
-> m ()
markNonFreshProgram :: forall name (m :: * -> *) (uni :: * -> *) fun ann.
(HasUnique name TermUnique, MonadQuote m) =>
Program name uni fun ann -> m ()
markNonFreshProgram (Program ann
_ Version
_ Term name uni fun ann
body) = Term name uni fun ann -> m ()
forall name (uni :: * -> *) fun ann (m :: * -> *).
(HasUniques (Term name uni fun ann), MonadQuote m) =>
Term name uni fun ann -> m ()
markNonFreshTerm Term name uni fun ann
body