{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module PlutusCore.Evaluation.Machine.MachineParameters
where
import PlutusCore (UniOf)
import PlutusCore.Builtin
import Control.DeepSeq
import Control.Lens
import GHC.Exts (inline)
import GHC.Generics
import NoThunks.Class
data CostModel machinecosts builtincosts =
CostModel {
forall machinecosts builtincosts.
CostModel machinecosts builtincosts -> machinecosts
_machineCostModel :: machinecosts
, forall machinecosts builtincosts.
CostModel machinecosts builtincosts -> builtincosts
_builtinCostModel :: builtincosts
} deriving stock (CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
(CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool)
-> (CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool)
-> Eq (CostModel machinecosts builtincosts)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall machinecosts builtincosts.
(Eq machinecosts, Eq builtincosts) =>
CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
$c== :: forall machinecosts builtincosts.
(Eq machinecosts, Eq builtincosts) =>
CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
== :: CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
$c/= :: forall machinecosts builtincosts.
(Eq machinecosts, Eq builtincosts) =>
CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
/= :: CostModel machinecosts builtincosts
-> CostModel machinecosts builtincosts -> Bool
Eq, Int -> CostModel machinecosts builtincosts -> ShowS
[CostModel machinecosts builtincosts] -> ShowS
CostModel machinecosts builtincosts -> String
(Int -> CostModel machinecosts builtincosts -> ShowS)
-> (CostModel machinecosts builtincosts -> String)
-> ([CostModel machinecosts builtincosts] -> ShowS)
-> Show (CostModel machinecosts builtincosts)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
Int -> CostModel machinecosts builtincosts -> ShowS
forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
[CostModel machinecosts builtincosts] -> ShowS
forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
CostModel machinecosts builtincosts -> String
$cshowsPrec :: forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
Int -> CostModel machinecosts builtincosts -> ShowS
showsPrec :: Int -> CostModel machinecosts builtincosts -> ShowS
$cshow :: forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
CostModel machinecosts builtincosts -> String
show :: CostModel machinecosts builtincosts -> String
$cshowList :: forall machinecosts builtincosts.
(Show machinecosts, Show builtincosts) =>
[CostModel machinecosts builtincosts] -> ShowS
showList :: [CostModel machinecosts builtincosts] -> ShowS
Show)
makeLenses ''CostModel
data MachineVariantParameters machineCosts fun val =
MachineVariantParameters {
forall machineCosts fun val.
MachineVariantParameters machineCosts fun val -> machineCosts
machineCosts :: machineCosts
, forall machineCosts fun val.
MachineVariantParameters machineCosts fun val
-> BuiltinsRuntime fun val
builtinsRuntime :: BuiltinsRuntime fun val
}
deriving stock (forall x.
MachineVariantParameters machineCosts fun val
-> Rep (MachineVariantParameters machineCosts fun val) x)
-> (forall x.
Rep (MachineVariantParameters machineCosts fun val) x
-> MachineVariantParameters machineCosts fun val)
-> Generic (MachineVariantParameters machineCosts fun val)
forall x.
Rep (MachineVariantParameters machineCosts fun val) x
-> MachineVariantParameters machineCosts fun val
forall x.
MachineVariantParameters machineCosts fun val
-> Rep (MachineVariantParameters machineCosts fun val) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall machineCosts fun val x.
Rep (MachineVariantParameters machineCosts fun val) x
-> MachineVariantParameters machineCosts fun val
forall machineCosts fun val x.
MachineVariantParameters machineCosts fun val
-> Rep (MachineVariantParameters machineCosts fun val) x
$cfrom :: forall machineCosts fun val x.
MachineVariantParameters machineCosts fun val
-> Rep (MachineVariantParameters machineCosts fun val) x
from :: forall x.
MachineVariantParameters machineCosts fun val
-> Rep (MachineVariantParameters machineCosts fun val) x
$cto :: forall machineCosts fun val x.
Rep (MachineVariantParameters machineCosts fun val) x
-> MachineVariantParameters machineCosts fun val
to :: forall x.
Rep (MachineVariantParameters machineCosts fun val) x
-> MachineVariantParameters machineCosts fun val
Generic
deriving anyclass (MachineVariantParameters machineCosts fun val -> ()
(MachineVariantParameters machineCosts fun val -> ())
-> NFData (MachineVariantParameters machineCosts fun val)
forall a. (a -> ()) -> NFData a
forall machineCosts fun val.
(NFData machineCosts, Bounded fun, Enum fun) =>
MachineVariantParameters machineCosts fun val -> ()
$crnf :: forall machineCosts fun val.
(NFData machineCosts, Bounded fun, Enum fun) =>
MachineVariantParameters machineCosts fun val -> ()
rnf :: MachineVariantParameters machineCosts fun val -> ()
NFData)
data MachineParameters machineCosts fun val =
MachineParameters {
forall machineCosts fun val.
MachineParameters machineCosts fun val -> CaserBuiltin (UniOf val)
machineCaserBuiltin :: CaserBuiltin (UniOf val)
, forall machineCosts fun val.
MachineParameters machineCosts fun val
-> MachineVariantParameters machineCosts fun val
machineVariantParameters :: MachineVariantParameters machineCosts fun val
}
deriving stock (forall x.
MachineParameters machineCosts fun val
-> Rep (MachineParameters machineCosts fun val) x)
-> (forall x.
Rep (MachineParameters machineCosts fun val) x
-> MachineParameters machineCosts fun val)
-> Generic (MachineParameters machineCosts fun val)
forall x.
Rep (MachineParameters machineCosts fun val) x
-> MachineParameters machineCosts fun val
forall x.
MachineParameters machineCosts fun val
-> Rep (MachineParameters machineCosts fun val) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall machineCosts fun val x.
Rep (MachineParameters machineCosts fun val) x
-> MachineParameters machineCosts fun val
forall machineCosts fun val x.
MachineParameters machineCosts fun val
-> Rep (MachineParameters machineCosts fun val) x
$cfrom :: forall machineCosts fun val x.
MachineParameters machineCosts fun val
-> Rep (MachineParameters machineCosts fun val) x
from :: forall x.
MachineParameters machineCosts fun val
-> Rep (MachineParameters machineCosts fun val) x
$cto :: forall machineCosts fun val x.
Rep (MachineParameters machineCosts fun val) x
-> MachineParameters machineCosts fun val
to :: forall x.
Rep (MachineParameters machineCosts fun val) x
-> MachineParameters machineCosts fun val
Generic
deriving anyclass (MachineParameters machineCosts fun val -> ()
(MachineParameters machineCosts fun val -> ())
-> NFData (MachineParameters machineCosts fun val)
forall a. (a -> ()) -> NFData a
forall machineCosts fun val.
(NFData machineCosts, Bounded fun, Enum fun) =>
MachineParameters machineCosts fun val -> ()
$crnf :: forall machineCosts fun val.
(NFData machineCosts, Bounded fun, Enum fun) =>
MachineParameters machineCosts fun val -> ()
rnf :: MachineParameters machineCosts fun val -> ()
NFData)
instance (NoThunks machinecosts, Bounded fun, Enum fun) => NoThunks (MachineVariantParameters machinecosts fun val) where
wNoThunks :: Context
-> MachineVariantParameters machinecosts fun val
-> IO (Maybe ThunkInfo)
wNoThunks Context
ctx (MachineVariantParameters machinecosts
costs BuiltinsRuntime fun val
runtime) =
[IO (Maybe ThunkInfo)] -> IO (Maybe ThunkInfo)
allNoThunks [ Context -> machinecosts -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Context -> a -> IO (Maybe ThunkInfo)
noThunks Context
ctx machinecosts
costs, Context -> BuiltinsRuntime fun val -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Context -> a -> IO (Maybe ThunkInfo)
noThunks Context
ctx BuiltinsRuntime fun val
runtime ]
instance (NoThunks machinecosts, Bounded fun, Enum fun) => NoThunks (MachineParameters machinecosts fun val) where
wNoThunks :: Context
-> MachineParameters machinecosts fun val -> IO (Maybe ThunkInfo)
wNoThunks Context
ctx (MachineParameters CaserBuiltin (UniOf val)
caser MachineVariantParameters machinecosts fun val
varPars) =
[IO (Maybe ThunkInfo)] -> IO (Maybe ThunkInfo)
allNoThunks [ Context -> CaserBuiltin (UniOf val) -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Context -> a -> IO (Maybe ThunkInfo)
noThunks Context
ctx CaserBuiltin (UniOf val)
caser, Context
-> MachineVariantParameters machinecosts fun val
-> IO (Maybe ThunkInfo)
forall a. NoThunks a => Context -> a -> IO (Maybe ThunkInfo)
noThunks Context
ctx MachineVariantParameters machinecosts fun val
varPars ]
mkMachineVariantParameters ::
(
CostingPart uni fun ~ builtincosts
, HasMeaningIn uni val
, ToBuiltinMeaning uni fun
)
=> BuiltinSemanticsVariant fun
-> CostModel machineCosts builtincosts
-> MachineVariantParameters machineCosts fun val
mkMachineVariantParameters :: forall (uni :: * -> *) fun builtincosts val machineCosts.
(CostingPart uni fun ~ builtincosts, HasMeaningIn uni val,
ToBuiltinMeaning uni fun) =>
BuiltinSemanticsVariant fun
-> CostModel machineCosts builtincosts
-> MachineVariantParameters machineCosts fun val
mkMachineVariantParameters BuiltinSemanticsVariant fun
semvar (CostModel machineCosts
mchnCosts builtincosts
builtinCosts) =
machineCosts
-> BuiltinsRuntime fun val
-> MachineVariantParameters machineCosts fun val
forall machineCosts fun val.
machineCosts
-> BuiltinsRuntime fun val
-> MachineVariantParameters machineCosts fun val
MachineVariantParameters machineCosts
mchnCosts (BuiltinsRuntime fun val
-> MachineVariantParameters machineCosts fun val)
-> BuiltinsRuntime fun val
-> MachineVariantParameters machineCosts fun val
forall a b. (a -> b) -> a -> b
$ (BuiltinSemanticsVariant fun
-> builtincosts -> BuiltinsRuntime fun val)
-> BuiltinSemanticsVariant fun
-> builtincosts
-> BuiltinsRuntime fun val
forall a. a -> a
inline BuiltinSemanticsVariant fun
-> builtincosts -> BuiltinsRuntime fun val
forall cost (uni :: * -> *) fun val.
(cost ~ CostingPart uni fun, ToBuiltinMeaning uni fun,
HasMeaningIn uni val) =>
BuiltinSemanticsVariant fun -> cost -> BuiltinsRuntime fun val
toBuiltinsRuntime BuiltinSemanticsVariant fun
semvar builtincosts
builtinCosts
{-# INLINE mkMachineVariantParameters #-}