module UntypedPlutusCore.AstSize
( AstSize (..)
, termAstSize
, programAstSize
) where
import PlutusCore.AstSize (AstSize (..))
import UntypedPlutusCore.Core
import Control.Lens
import Data.Foldable
termAstSize :: Term name uni fun ann -> AstSize
termAstSize :: forall name (uni :: * -> *) fun ann.
Term name uni fun ann -> AstSize
termAstSize Term name uni fun ann
term =
[AstSize] -> AstSize
forall m. Monoid m => [m] -> m
forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold
[ Integer -> AstSize
AstSize Integer
1
, Term name uni fun ann
term Term name uni fun ann
-> Getting AstSize (Term name uni fun ann) AstSize -> AstSize
forall s a. s -> Getting a s a -> a
^. (Term name uni fun ann -> Const AstSize (Term name uni fun ann))
-> Term name uni fun ann -> Const AstSize (Term name uni fun ann)
forall name (uni :: * -> *) fun ann (f :: * -> *).
Applicative f =>
(Term name uni fun ann -> f (Term name uni fun ann))
-> Term name uni fun ann -> f (Term name uni fun ann)
termSubterms ((Term name uni fun ann -> Const AstSize (Term name uni fun ann))
-> Term name uni fun ann -> Const AstSize (Term name uni fun ann))
-> Getting AstSize (Term name uni fun ann) AstSize
-> Getting AstSize (Term name uni fun ann) AstSize
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Term name uni fun ann -> AstSize)
-> Getting AstSize (Term name uni fun ann) AstSize
forall (p :: * -> * -> *) (f :: * -> *) s a.
(Profunctor p, Contravariant f) =>
(s -> a) -> Optic' p f s a
to Term name uni fun ann -> AstSize
forall name (uni :: * -> *) fun ann.
Term name uni fun ann -> AstSize
termAstSize
]
programAstSize :: Program name uni fun ann -> AstSize
programAstSize :: forall name (uni :: * -> *) fun ann.
Program name uni fun ann -> AstSize
programAstSize (Program ann
_ Version
_ Term name uni fun ann
t) = Term name uni fun ann -> AstSize
forall name (uni :: * -> *) fun ann.
Term name uni fun ann -> AstSize
termAstSize Term name uni fun ann
t