module UntypedPlutusCore (
    module Export
    , Term (..)
    , Program (..)
    , applyProgram
    , parseScoped
    , PLC.DefaultUni
    , PLC.DefaultFun
    ) where

import UntypedPlutusCore.Core as Export
import UntypedPlutusCore.DeBruijn as Export
import UntypedPlutusCore.Parser as Parser (parseScoped)
import UntypedPlutusCore.Simplify as Export
import UntypedPlutusCore.Size as Export
import UntypedPlutusCore.Subst as Export

import PlutusCore qualified as PLC
import PlutusCore.Name as Export

-- | Take one UPLC program and apply it to another.
applyProgram :: Program name uni fun () -> Program name uni fun () -> Program name uni fun ()
applyProgram :: Program name uni fun ()
-> Program name uni fun () -> Program name uni fun ()
applyProgram (Program ()
_ Version ()
_ Term name uni fun ()
t1) (Program ()
_ Version ()
_ Term name uni fun ()
t2) = () -> Version () -> Term name uni fun () -> Program name uni fun ()
forall name (uni :: * -> *) fun ann.
ann
-> Version ann -> Term name uni fun ann -> Program name uni fun ann
Program () (() -> Version ()
forall ann. ann -> Version ann
PLC.defaultVersion ()) (()
-> Term name uni fun ()
-> Term name uni fun ()
-> Term name uni fun ()
forall name (uni :: * -> *) fun ann.
ann
-> Term name uni fun ann
-> Term name uni fun ann
-> Term name uni fun ann
Apply () Term name uni fun ()
t1 Term name uni fun ()
t2)