{-# LANGUAGE TemplateHaskell #-} module PlutusCore.Compiler.Opts ( CompilationOpts (..) , coOptimizeOpts , coBuiltinSemanticsVariant , defaultCompilationOpts ) where import Control.Lens (makeLenses) import Data.Default.Class (Default (def)) import PlutusCore.Builtin.Meaning (BuiltinSemanticsVariant) import UntypedPlutusCore.Optimize.Opts (OptimizeOpts, defaultOptimizeOpts) data CompilationOpts name fun a = CompilationOpts { forall name fun a. CompilationOpts name fun a -> OptimizeOpts name a _coOptimizeOpts :: OptimizeOpts name a , forall name fun a. CompilationOpts name fun a -> BuiltinSemanticsVariant fun _coBuiltinSemanticsVariant :: BuiltinSemanticsVariant fun } $(makeLenses ''CompilationOpts) defaultCompilationOpts :: Default (BuiltinSemanticsVariant fun) => CompilationOpts name fun a defaultCompilationOpts :: forall fun name a. Default (BuiltinSemanticsVariant fun) => CompilationOpts name fun a defaultCompilationOpts = CompilationOpts { _coOptimizeOpts :: OptimizeOpts name a _coOptimizeOpts = OptimizeOpts name a forall name a. OptimizeOpts name a defaultOptimizeOpts , _coBuiltinSemanticsVariant :: BuiltinSemanticsVariant fun _coBuiltinSemanticsVariant = BuiltinSemanticsVariant fun forall a. Default a => a def }