{-# LANGUAGE LambdaCase #-}
module UntypedPlutusCore.Transform.ForceDelay
    ( forceDelayCancel
    ) where

import UntypedPlutusCore.Core

import Control.Lens (transformOf)

forceDelayCancel :: Term name uni fun a -> Term name uni fun a
forceDelayCancel :: Term name uni fun a -> Term name uni fun a
forceDelayCancel = ASetter
  (Term name uni fun a)
  (Term name uni fun a)
  (Term name uni fun a)
  (Term name uni fun a)
-> (Term name uni fun a -> Term name uni fun a)
-> Term name uni fun a
-> Term name uni fun a
forall a b. ASetter a b a b -> (b -> b) -> a -> b
transformOf ASetter
  (Term name uni fun a)
  (Term name uni fun a)
  (Term name uni fun a)
  (Term name uni fun a)
forall name (uni :: * -> *) fun ann.
Traversal' (Term name uni fun ann) (Term name uni fun ann)
termSubterms Term name uni fun a -> Term name uni fun a
forall name (uni :: * -> *) fun a.
Term name uni fun a -> Term name uni fun a
processTerm

processTerm :: Term name uni fun a -> Term name uni fun a
processTerm :: Term name uni fun a -> Term name uni fun a
processTerm = \case
    Force a
_ (Delay a
_ Term name uni fun a
t) -> Term name uni fun a
t
    Term name uni fun a
t                   -> Term name uni fun a
t