module Cardano.YTxP.Control.Yielding.Scripts (
  yielding,
) where

import Cardano.YTxP.Control.Yielding.Helper (yieldingHelper)
import Plutarch.LedgerApi.V3 (PCurrencySymbol, PScriptContext)

--------------------------------------------------------------------------------
-- Plutarch level terms

-- | Yielding Validator
yielding ::
  forall (s :: S).
  Term
    s
    ( PCurrencySymbol :--> PAsData PInteger :--> PScriptContext :--> PUnit
    )
yielding :: forall (s :: S).
Term
  s
  (PCurrencySymbol
   :--> (PAsData PInteger :--> (PScriptContext :--> PUnit)))
yielding = (Term s PCurrencySymbol
 -> Term s (PAsData PInteger)
 -> Term s PScriptContext
 -> Term s PUnit)
-> Term
     s
     (PCurrencySymbol
      :--> (PAsData PInteger :--> (PScriptContext :--> PUnit)))
forall a (b :: PType) (s :: S) (c :: PType).
(PLamN a b s, HasCallStack) =>
(Term s c -> a) -> Term s (c :--> b)
forall (c :: PType).
HasCallStack =>
(Term s c
 -> Term s (PAsData PInteger)
 -> Term s PScriptContext
 -> Term s PUnit)
-> Term
     s (c :--> (PAsData PInteger :--> (PScriptContext :--> PUnit)))
plam ((Term s PCurrencySymbol
  -> Term s (PAsData PInteger)
  -> Term s PScriptContext
  -> Term s PUnit)
 -> Term
      s
      (PCurrencySymbol
       :--> (PAsData PInteger :--> (PScriptContext :--> PUnit))))
-> (Term s PCurrencySymbol
    -> Term s (PAsData PInteger)
    -> Term s PScriptContext
    -> Term s PUnit)
-> Term
     s
     (PCurrencySymbol
      :--> (PAsData PInteger :--> (PScriptContext :--> PUnit)))
forall a b. (a -> b) -> a -> b
$ \Term s PCurrencySymbol
psymbol Term s (PAsData PInteger)
_nonce Term s PScriptContext
ctx ->
  Term s (PCurrencySymbol :--> (PScriptContext :--> PUnit))
forall (s :: S).
Term s (PCurrencySymbol :--> (PScriptContext :--> PUnit))
yieldingHelper Term s (PCurrencySymbol :--> (PScriptContext :--> PUnit))
-> Term s PCurrencySymbol -> Term s (PScriptContext :--> PUnit)
forall (s :: S) (a :: PType) (b :: PType).
Term s (a :--> b) -> Term s a -> Term s b
# Term s PCurrencySymbol
psymbol Term s (PScriptContext :--> PUnit)
-> Term s PScriptContext -> Term s PUnit
forall (s :: S) (a :: PType) (b :: PType).
Term s (a :--> b) -> Term s a -> Term s b
# Term s PScriptContext
ctx