{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE StandaloneDeriving #-}

module Cardano.Ledger.Shelley.RewardProvenance (
  RewardProvenance (..),
  RewardProvenancePool (..),
  Desirability (..),
) where

import Cardano.Ledger.BaseTypes (BlocksMade (..))
import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
import Cardano.Ledger.Binary.Coders
import Cardano.Ledger.Coin (Coin (..))
import Cardano.Ledger.Keys (KeyHash (..), KeyRole (..))
import Cardano.Ledger.PoolParams (PoolParams (..))
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON, ToJSON)
import Data.Default (Default (..))
import Data.Map.Strict (Map)
import Data.Word (Word64)
import GHC.Generics
import NoThunks.Class (NoThunks (..))
import Numeric.Natural (Natural)

-- instances only
-- ==========================================================

-- | Provenance for an individual stake pool's reward calculation.
data RewardProvenancePool = RewardProvenancePool
  { RewardProvenancePool -> Natural
poolBlocksP :: !Natural
  -- ^ The number of blocks the pool produced.
  , RewardProvenancePool -> Rational
sigmaP :: !Rational
  -- ^ The stake pool's stake share (portion of the total stake).
  , RewardProvenancePool -> Rational
sigmaAP :: !Rational
  -- ^ The stake pool's active stake share (portion of the active stake).
  , RewardProvenancePool -> Coin
ownerStakeP :: !Coin
  -- ^ The number of Lovelace owned by the stake pool owners.
  -- If this value is not at least as large as the 'pledgeRatioP',
  -- the stake pool will not earn any rewards for the given epoch.
  , RewardProvenancePool -> PoolParams
poolParamsP :: !PoolParams
  -- ^ The stake pool's registered parameters.
  , RewardProvenancePool -> Rational
pledgeRatioP :: !Rational
  -- ^ The stake pool's pledge.
  , RewardProvenancePool -> Coin
maxPP :: !Coin
  -- ^ The maximum number of Lovelace this stake pool can earn.
  , RewardProvenancePool -> Rational
appPerfP :: !Rational
  -- ^ The stake pool's apparent performance.
  -- See Section 5.5.2 of the
  --  <https://github.com/intersectmbo/cardano-ledger/releases/latest/download/shelley-delegation.pdf>
  , RewardProvenancePool -> Coin
poolRP :: !Coin
  -- ^ The total Lovelace earned by the stake pool.
  , RewardProvenancePool -> Coin
lRewardP :: !Coin
  -- ^ The total Lovelace earned by the stake pool leader.
  }
  deriving (RewardProvenancePool -> RewardProvenancePool -> Bool
(RewardProvenancePool -> RewardProvenancePool -> Bool)
-> (RewardProvenancePool -> RewardProvenancePool -> Bool)
-> Eq RewardProvenancePool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RewardProvenancePool -> RewardProvenancePool -> Bool
== :: RewardProvenancePool -> RewardProvenancePool -> Bool
$c/= :: RewardProvenancePool -> RewardProvenancePool -> Bool
/= :: RewardProvenancePool -> RewardProvenancePool -> Bool
Eq, (forall x. RewardProvenancePool -> Rep RewardProvenancePool x)
-> (forall x. Rep RewardProvenancePool x -> RewardProvenancePool)
-> Generic RewardProvenancePool
forall x. Rep RewardProvenancePool x -> RewardProvenancePool
forall x. RewardProvenancePool -> Rep RewardProvenancePool x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. RewardProvenancePool -> Rep RewardProvenancePool x
from :: forall x. RewardProvenancePool -> Rep RewardProvenancePool x
$cto :: forall x. Rep RewardProvenancePool x -> RewardProvenancePool
to :: forall x. Rep RewardProvenancePool x -> RewardProvenancePool
Generic)

instance NoThunks RewardProvenancePool

instance NFData RewardProvenancePool

instance FromJSON RewardProvenancePool

instance ToJSON RewardProvenancePool

instance Default RewardProvenancePool where
  def :: RewardProvenancePool
def = Natural
-> Rational
-> Rational
-> Coin
-> PoolParams
-> Rational
-> Coin
-> Rational
-> Coin
-> Coin
-> RewardProvenancePool
RewardProvenancePool Natural
0 Rational
0 Rational
0 (Integer -> Coin
Coin Integer
0) PoolParams
forall a. Default a => a
def Rational
0 (Integer -> Coin
Coin Integer
0) Rational
0 (Integer -> Coin
Coin Integer
0) (Integer -> Coin
Coin Integer
0)

-- | The desirability score of a stake pool, as described
-- in <https://arxiv.org/abs/1807.11218 "Reward Sharing Schemes for Stake Pools">.
-- Additionally, the hit rate estimation described in the
-- <https://github.com/intersectmbo/cardano-ledger/releases/latest/download/pool-ranking.pdf stake pool ranking document> is included.
data Desirability = Desirability
  { Desirability -> Double
desirabilityScore :: !Double
  , Desirability -> Double
hitRateEstimate :: !Double
  }
  deriving (Desirability -> Desirability -> Bool
(Desirability -> Desirability -> Bool)
-> (Desirability -> Desirability -> Bool) -> Eq Desirability
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Desirability -> Desirability -> Bool
== :: Desirability -> Desirability -> Bool
$c/= :: Desirability -> Desirability -> Bool
/= :: Desirability -> Desirability -> Bool
Eq, Int -> Desirability -> ShowS
[Desirability] -> ShowS
Desirability -> String
(Int -> Desirability -> ShowS)
-> (Desirability -> String)
-> ([Desirability] -> ShowS)
-> Show Desirability
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Desirability -> ShowS
showsPrec :: Int -> Desirability -> ShowS
$cshow :: Desirability -> String
show :: Desirability -> String
$cshowList :: [Desirability] -> ShowS
showList :: [Desirability] -> ShowS
Show, (forall x. Desirability -> Rep Desirability x)
-> (forall x. Rep Desirability x -> Desirability)
-> Generic Desirability
forall x. Rep Desirability x -> Desirability
forall x. Desirability -> Rep Desirability x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Desirability -> Rep Desirability x
from :: forall x. Desirability -> Rep Desirability x
$cto :: forall x. Rep Desirability x -> Desirability
to :: forall x. Rep Desirability x -> Desirability
Generic)

instance NoThunks Desirability

instance NFData Desirability

-- | 'RewardProvenenace' captures some of the intermediate calculations when computing
--     the staking reward distribution. Most of these fields are simple scalar
--     values, computed from the current State, and are fixed before we start to compute
--     the distribution. Two of them are aggregates computed when we compute the distribution
--     ('pools' and 'desirabilities').
--
--  For more background, see "Figure 48: The Reward Calculation" and
--  "Figure 51: Reward Update Creation" of the
--  <https://github.com/intersectmbo/cardano-ledger/releases/latest/download/shelley-ledger.pdf the formal specification>.
--  The variable names here align with those in the specification.
--  See also Section 5 of the
--  <https://github.com/intersectmbo/cardano-ledger/releases/latest/download/shelley-delegation.pdf>
data RewardProvenance = RewardProvenance
  { RewardProvenance -> Word64
spe :: !Word64
  -- ^ The number of slots per epoch.
  , RewardProvenance -> BlocksMade
blocks :: !BlocksMade
  -- ^ A map from pool ID (the key hash of the stake pool operator's
  -- verification key) to the number of blocks made in the given epoch.
  , RewardProvenance -> Coin
maxLL :: !Coin
  -- ^ The maximum Lovelace supply. On mainnet, this value is equal to
  -- 45 * 10^15 (45 billion ADA).
  , RewardProvenance -> Coin
deltaR1 :: !Coin
  -- ^ The maximum amount of Lovelace which can be removed from the reserves
  -- to be given out as rewards for the given epoch.
  , RewardProvenance -> Coin
deltaR2 :: !Coin
  -- ^ The difference between the total Lovelace that could have been
  -- distributed as rewards this epoch (which is 'r') and what was actually distributed.
  , RewardProvenance -> Coin
r :: !Coin
  -- ^ The total Lovelace available for rewards for the given epoch,
  -- equal to 'rPot' less 'deltaT1'.
  , RewardProvenance -> Coin
totalStake :: !Coin
  -- ^ The maximum Lovelace supply ('maxLL') less the current value of the reserves.
  , RewardProvenance -> Integer
blocksCount :: !Integer
  -- ^ The total number of blocks produced during the given epoch.
  , RewardProvenance -> Rational
d :: !Rational
  -- ^ The decentralization parameter.
  , RewardProvenance -> Integer
expBlocks :: !Integer
  -- ^ The number of blocks expected to be produced during the given epoch.
  , RewardProvenance -> Rational
eta :: !Rational
  -- ^ The ratio of the number of blocks actually made versus the number
  -- of blocks that were expected.
  , RewardProvenance -> Coin
rPot :: !Coin
  -- ^ The reward pot for the given epoch, equal to 'deltaR1' plus the fee pot.
  , RewardProvenance -> Coin
deltaT1 :: !Coin
  -- ^ The amount of Lovelace taken from the treasury for the given epoch.
  , RewardProvenance -> Coin
activeStake :: !Coin
  -- ^ The amount of Lovelace that is delegated during the given epoch.
  , RewardProvenance -> Map (KeyHash 'StakePool) RewardProvenancePool
pools :: !(Map (KeyHash 'StakePool) RewardProvenancePool)
  -- ^ Individual stake pool provenance.
  , RewardProvenance -> Map (KeyHash 'StakePool) Desirability
desirabilities :: !(Map (KeyHash 'StakePool) Desirability)
  -- ^ A map from pool ID to the desirability score.
  -- See the <https://github.com/intersectmbo/cardano-ledger/releases/latest/download/pool-ranking.pdf stake pool ranking document>.
  }
  deriving (RewardProvenance -> RewardProvenance -> Bool
(RewardProvenance -> RewardProvenance -> Bool)
-> (RewardProvenance -> RewardProvenance -> Bool)
-> Eq RewardProvenance
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RewardProvenance -> RewardProvenance -> Bool
== :: RewardProvenance -> RewardProvenance -> Bool
$c/= :: RewardProvenance -> RewardProvenance -> Bool
/= :: RewardProvenance -> RewardProvenance -> Bool
Eq, (forall x. RewardProvenance -> Rep RewardProvenance x)
-> (forall x. Rep RewardProvenance x -> RewardProvenance)
-> Generic RewardProvenance
forall x. Rep RewardProvenance x -> RewardProvenance
forall x. RewardProvenance -> Rep RewardProvenance x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. RewardProvenance -> Rep RewardProvenance x
from :: forall x. RewardProvenance -> Rep RewardProvenance x
$cto :: forall x. Rep RewardProvenance x -> RewardProvenance
to :: forall x. Rep RewardProvenance x -> RewardProvenance
Generic)

instance FromJSON Desirability

instance ToJSON Desirability

instance FromJSON RewardProvenance

instance ToJSON RewardProvenance

instance NoThunks RewardProvenance

instance NFData RewardProvenance

instance Default RewardProvenance where
  def :: RewardProvenance
def =
    Word64
-> BlocksMade
-> Coin
-> Coin
-> Coin
-> Coin
-> Coin
-> Integer
-> Rational
-> Integer
-> Rational
-> Coin
-> Coin
-> Coin
-> Map (KeyHash 'StakePool) RewardProvenancePool
-> Map (KeyHash 'StakePool) Desirability
-> RewardProvenance
RewardProvenance
      Word64
0
      (Map (KeyHash 'StakePool) Natural -> BlocksMade
BlocksMade Map (KeyHash 'StakePool) Natural
forall a. Default a => a
def)
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      Integer
0
      Rational
0
      Integer
0
      Rational
0
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      (Integer -> Coin
Coin Integer
0)
      Map (KeyHash 'StakePool) RewardProvenancePool
forall a. Default a => a
def
      Map (KeyHash 'StakePool) Desirability
forall a. Default a => a
def

-- =======================================================
-- Show instances

mylines :: Int -> [String] -> String
mylines :: Int -> Context -> String
mylines Int
n Context
xs = Context -> String
unlines (ShowS -> Context -> Context
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Char -> String
forall a. Int -> a -> [a]
replicate Int
n Char
' ' String -> ShowS
forall a. [a] -> [a] -> [a]
++) Context
xs)

instance Show RewardProvenancePool where
  show :: RewardProvenancePool -> String
show RewardProvenancePool
t =
    String
"RewardProvenancePool\n"
      String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> Context -> String
mylines
        Int
3
        [ String
"poolBlocks = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Natural -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Natural
poolBlocksP RewardProvenancePool
t)
        , String
"sigma = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Rational
sigmaP RewardProvenancePool
t)
        , String
"sigmaA = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Rational
sigmaAP RewardProvenancePool
t)
        , String
"ownerStake = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Coin
ownerStakeP RewardProvenancePool
t)
        , String
"poolParams = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ PoolParams -> String
showPoolParams (RewardProvenancePool -> PoolParams
poolParamsP RewardProvenancePool
t)
        , String
"pledgeRatio = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Rational
pledgeRatioP RewardProvenancePool
t)
        , String
"maxP = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Coin
maxPP RewardProvenancePool
t)
        , String
"appPerf = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Rational
appPerfP RewardProvenancePool
t)
        , String
"poolR = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Coin
poolRP RewardProvenancePool
t)
        , String
"lReward = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenancePool -> Coin
lRewardP RewardProvenancePool
t)
        ]

showPoolParams :: PoolParams -> String
showPoolParams :: PoolParams -> String
showPoolParams PoolParams
x =
  String
"PoolParams\n"
    String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> Context -> String
mylines
      Int
6
      [ String
"poolId = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ KeyHash 'StakePool -> String
forall a. Show a => a -> String
show (PoolParams -> KeyHash 'StakePool
ppId PoolParams
x)
      , String
"poolVrf = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ VRFVerKeyHash 'StakePoolVRF -> String
forall a. Show a => a -> String
show (PoolParams -> VRFVerKeyHash 'StakePoolVRF
ppVrf PoolParams
x)
      , String
"poolPledge = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (PoolParams -> Coin
ppPledge PoolParams
x)
      , String
"poolCost = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (PoolParams -> Coin
ppCost PoolParams
x)
      , String
"poolMargin = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ UnitInterval -> String
forall a. Show a => a -> String
show (PoolParams -> UnitInterval
ppMargin PoolParams
x)
      , String
"poolRAcnt = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ RewardAccount -> String
forall a. Show a => a -> String
show (PoolParams -> RewardAccount
ppRewardAccount PoolParams
x)
      , String
"poolOwners = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Set (KeyHash 'Staking) -> String
forall a. Show a => a -> String
show (PoolParams -> Set (KeyHash 'Staking)
ppOwners PoolParams
x)
      , String
"poolRelays = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ StrictSeq StakePoolRelay -> String
forall a. Show a => a -> String
show (PoolParams -> StrictSeq StakePoolRelay
ppRelays PoolParams
x)
      , String
"poolMD = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ StrictMaybe PoolMetadata -> String
forall a. Show a => a -> String
show (PoolParams -> StrictMaybe PoolMetadata
ppMetadata PoolParams
x)
      ]

instance Show RewardProvenance where
  show :: RewardProvenance -> String
show RewardProvenance
t =
    String
"RewardProvenance\n"
      String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> Context -> String
mylines
        Int
3
        [ String
"spe = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word64 -> String
forall a. Show a => a -> String
show (RewardProvenance -> Word64
spe RewardProvenance
t)
        , String
"blocks = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ BlocksMade -> String
forall a. Show a => a -> String
show (RewardProvenance -> BlocksMade
blocks RewardProvenance
t)
        , String
"maxLL = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
maxLL RewardProvenance
t)
        , String
"deltaR1 = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
deltaR1 RewardProvenance
t)
        , String
"deltaR2 = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
deltaR2 RewardProvenance
t)
        , String
"r = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
r RewardProvenance
t)
        , String
"totalStake = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
totalStake RewardProvenance
t)
        , String
"blocksCount = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Integer -> String
forall a. Show a => a -> String
show (RewardProvenance -> Integer
blocksCount RewardProvenance
t)
        , String
"d = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenance -> Rational
d RewardProvenance
t)
        , String
"expBlocks = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Integer -> String
forall a. Show a => a -> String
show (RewardProvenance -> Integer
expBlocks RewardProvenance
t)
        , String
"eta = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Rational -> String
forall a. Show a => a -> String
show (RewardProvenance -> Rational
eta RewardProvenance
t)
        , String
"rPot = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
rPot RewardProvenance
t)
        , String
"deltaT1 = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
deltaT1 RewardProvenance
t)
        , String
"activeStake = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Coin -> String
forall a. Show a => a -> String
show (RewardProvenance -> Coin
activeStake RewardProvenance
t)
        , String
"pools = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Map (KeyHash 'StakePool) RewardProvenancePool -> String
forall a. Show a => a -> String
show (RewardProvenance -> Map (KeyHash 'StakePool) RewardProvenancePool
pools RewardProvenance
t)
        , String
"desirabilities = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Map (KeyHash 'StakePool) Desirability -> String
forall a. Show a => a -> String
show (RewardProvenance -> Map (KeyHash 'StakePool) Desirability
desirabilities RewardProvenance
t)
        ]

-- =======================================================
-- CBOR instances

instance EncCBOR Desirability where
  encCBOR :: Desirability -> Encoding
encCBOR (Desirability Double
p1 Double
p2) =
    Encode ('Closed 'Dense) Desirability -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode ('Closed 'Dense) Desirability -> Encoding)
-> Encode ('Closed 'Dense) Desirability -> Encoding
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Desirability)
-> Encode ('Closed 'Dense) (Double -> Double -> Desirability)
forall t. t -> Encode ('Closed 'Dense) t
Rec Double -> Double -> Desirability
Desirability Encode ('Closed 'Dense) (Double -> Double -> Desirability)
-> Encode ('Closed 'Dense) Double
-> Encode ('Closed 'Dense) (Double -> Desirability)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Double -> Encode ('Closed 'Dense) Double
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Double
p1 Encode ('Closed 'Dense) (Double -> Desirability)
-> Encode ('Closed 'Dense) Double
-> Encode ('Closed 'Dense) Desirability
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Double -> Encode ('Closed 'Dense) Double
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Double
p2

instance DecCBOR Desirability where
  decCBOR :: forall s. Decoder s Desirability
decCBOR = Decode ('Closed 'Dense) Desirability -> Decoder s Desirability
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) Desirability -> Decoder s Desirability)
-> Decode ('Closed 'Dense) Desirability -> Decoder s Desirability
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Desirability)
-> Decode ('Closed 'Dense) (Double -> Double -> Desirability)
forall t. t -> Decode ('Closed 'Dense) t
RecD Double -> Double -> Desirability
Desirability Decode ('Closed 'Dense) (Double -> Double -> Desirability)
-> Decode ('Closed Any) Double
-> Decode ('Closed 'Dense) (Double -> Desirability)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Double
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode ('Closed 'Dense) (Double -> Desirability)
-> Decode ('Closed Any) Double
-> Decode ('Closed 'Dense) Desirability
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Double
forall t (w :: Wrapped). DecCBOR t => Decode w t
From

instance EncCBOR RewardProvenancePool where
  encCBOR :: RewardProvenancePool -> Encoding
encCBOR (RewardProvenancePool Natural
p1 Rational
p2 Rational
p3 Coin
p4 PoolParams
p5 Rational
p6 Coin
p7 Rational
p8 Coin
p9 Coin
p10) =
    Encode ('Closed 'Dense) RewardProvenancePool -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode ('Closed 'Dense) RewardProvenancePool -> Encoding)
-> Encode ('Closed 'Dense) RewardProvenancePool -> Encoding
forall a b. (a -> b) -> a -> b
$
      (Natural
 -> Rational
 -> Rational
 -> Coin
 -> PoolParams
 -> Rational
 -> Coin
 -> Rational
 -> Coin
 -> Coin
 -> RewardProvenancePool)
-> Encode
     ('Closed 'Dense)
     (Natural
      -> Rational
      -> Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall t. t -> Encode ('Closed 'Dense) t
Rec Natural
-> Rational
-> Rational
-> Coin
-> PoolParams
-> Rational
-> Coin
-> Rational
-> Coin
-> Coin
-> RewardProvenancePool
RewardProvenancePool
        Encode
  ('Closed 'Dense)
  (Natural
   -> Rational
   -> Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Natural
-> Encode
     ('Closed 'Dense)
     (Rational
      -> Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Natural -> Encode ('Closed 'Dense) Natural
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Natural
p1
        Encode
  ('Closed 'Dense)
  (Rational
   -> Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Rational
-> Encode
     ('Closed 'Dense)
     (Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p2
        Encode
  ('Closed 'Dense)
  (Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Rational
-> Encode
     ('Closed 'Dense)
     (Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p3
        Encode
  ('Closed 'Dense)
  (Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p4
        Encode
  ('Closed 'Dense)
  (PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Encode ('Closed 'Dense) PoolParams
-> Encode
     ('Closed 'Dense)
     (Rational
      -> Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> PoolParams -> Encode ('Closed 'Dense) PoolParams
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To PoolParams
p5
        Encode
  ('Closed 'Dense)
  (Rational
   -> Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Rational
-> Encode
     ('Closed 'Dense)
     (Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p6
        Encode
  ('Closed 'Dense)
  (Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense) (Rational -> Coin -> Coin -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p7
        Encode
  ('Closed 'Dense) (Rational -> Coin -> Coin -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Rational
-> Encode ('Closed 'Dense) (Coin -> Coin -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p8
        Encode ('Closed 'Dense) (Coin -> Coin -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Coin
-> Encode ('Closed 'Dense) (Coin -> RewardProvenancePool)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p9
        Encode ('Closed 'Dense) (Coin -> RewardProvenancePool)
-> Encode ('Closed 'Dense) Coin
-> Encode ('Closed 'Dense) RewardProvenancePool
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p10

instance DecCBOR RewardProvenancePool where
  decCBOR :: forall s. Decoder s RewardProvenancePool
decCBOR =
    Decode ('Closed 'Dense) RewardProvenancePool
-> Decoder s RewardProvenancePool
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) RewardProvenancePool
 -> Decoder s RewardProvenancePool)
-> Decode ('Closed 'Dense) RewardProvenancePool
-> Decoder s RewardProvenancePool
forall a b. (a -> b) -> a -> b
$
      (Natural
 -> Rational
 -> Rational
 -> Coin
 -> PoolParams
 -> Rational
 -> Coin
 -> Rational
 -> Coin
 -> Coin
 -> RewardProvenancePool)
-> Decode
     ('Closed 'Dense)
     (Natural
      -> Rational
      -> Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall t. t -> Decode ('Closed 'Dense) t
RecD Natural
-> Rational
-> Rational
-> Coin
-> PoolParams
-> Rational
-> Coin
-> Rational
-> Coin
-> Coin
-> RewardProvenancePool
RewardProvenancePool
        Decode
  ('Closed 'Dense)
  (Natural
   -> Rational
   -> Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Decode ('Closed Any) Natural
-> Decode
     ('Closed 'Dense)
     (Rational
      -> Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Natural
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Rational
   -> Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Decode ('Closed Any) Rational
-> Decode
     ('Closed 'Dense)
     (Rational
      -> Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Rational
   -> Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Decode ('Closed Any) Rational
-> Decode
     ('Closed 'Dense)
     (Coin
      -> PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (PoolParams
      -> Rational
      -> Coin
      -> Rational
      -> Coin
      -> Coin
      -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (PoolParams
   -> Rational
   -> Coin
   -> Rational
   -> Coin
   -> Coin
   -> RewardProvenancePool)
-> Decode ('Closed Any) PoolParams
-> Decode
     ('Closed 'Dense)
     (Rational
      -> Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) PoolParams
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Rational
   -> Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
-> Decode ('Closed Any) Rational
-> Decode
     ('Closed 'Dense)
     (Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin -> Rational -> Coin -> Coin -> RewardProvenancePool)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense) (Rational -> Coin -> Coin -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense) (Rational -> Coin -> Coin -> RewardProvenancePool)
-> Decode ('Closed Any) Rational
-> Decode ('Closed 'Dense) (Coin -> Coin -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode ('Closed 'Dense) (Coin -> Coin -> RewardProvenancePool)
-> Decode ('Closed Any) Coin
-> Decode ('Closed 'Dense) (Coin -> RewardProvenancePool)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode ('Closed 'Dense) (Coin -> RewardProvenancePool)
-> Decode ('Closed Any) Coin
-> Decode ('Closed 'Dense) RewardProvenancePool
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From

instance EncCBOR RewardProvenance where
  encCBOR :: RewardProvenance -> Encoding
encCBOR (RewardProvenance Word64
p1 BlocksMade
p2 Coin
p3 Coin
p4 Coin
p5 Coin
p6 Coin
p7 Integer
p8 Rational
p9 Integer
p10 Rational
p11 Coin
p12 Coin
p13 Coin
p14 Map (KeyHash 'StakePool) RewardProvenancePool
p15 Map (KeyHash 'StakePool) Desirability
p16) =
    Encode ('Closed 'Dense) RewardProvenance -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode ('Closed 'Dense) RewardProvenance -> Encoding)
-> Encode ('Closed 'Dense) RewardProvenance -> Encoding
forall a b. (a -> b) -> a -> b
$
      (Word64
 -> BlocksMade
 -> Coin
 -> Coin
 -> Coin
 -> Coin
 -> Coin
 -> Integer
 -> Rational
 -> Integer
 -> Rational
 -> Coin
 -> Coin
 -> Coin
 -> Map (KeyHash 'StakePool) RewardProvenancePool
 -> Map (KeyHash 'StakePool) Desirability
 -> RewardProvenance)
-> Encode
     ('Closed 'Dense)
     (Word64
      -> BlocksMade
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall t. t -> Encode ('Closed 'Dense) t
Rec Word64
-> BlocksMade
-> Coin
-> Coin
-> Coin
-> Coin
-> Coin
-> Integer
-> Rational
-> Integer
-> Rational
-> Coin
-> Coin
-> Coin
-> Map (KeyHash 'StakePool) RewardProvenancePool
-> Map (KeyHash 'StakePool) Desirability
-> RewardProvenance
RewardProvenance
        Encode
  ('Closed 'Dense)
  (Word64
   -> BlocksMade
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Word64
-> Encode
     ('Closed 'Dense)
     (BlocksMade
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Word64 -> Encode ('Closed 'Dense) Word64
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Word64
p1
        Encode
  ('Closed 'Dense)
  (BlocksMade
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) BlocksMade
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> BlocksMade -> Encode ('Closed 'Dense) BlocksMade
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To BlocksMade
p2
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p3
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p4
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p5
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p6
        Encode
  ('Closed 'Dense)
  (Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p7
        Encode
  ('Closed 'Dense)
  (Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Integer
-> Encode
     ('Closed 'Dense)
     (Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Integer -> Encode ('Closed 'Dense) Integer
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Integer
p8
        Encode
  ('Closed 'Dense)
  (Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Rational
-> Encode
     ('Closed 'Dense)
     (Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p9
        Encode
  ('Closed 'Dense)
  (Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Integer
-> Encode
     ('Closed 'Dense)
     (Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Integer -> Encode ('Closed 'Dense) Integer
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Integer
p10
        Encode
  ('Closed 'Dense)
  (Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Rational
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Rational -> Encode ('Closed 'Dense) Rational
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Rational
p11
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p12
        Encode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p13
        Encode
  ('Closed 'Dense)
  (Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Encode ('Closed 'Dense) Coin
-> Encode
     ('Closed 'Dense)
     (Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Coin -> Encode ('Closed 'Dense) Coin
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Coin
p14
        Encode
  ('Closed 'Dense)
  (Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
-> Encode
     ('Closed 'Dense) (Map (KeyHash 'StakePool) RewardProvenancePool)
-> Encode
     ('Closed 'Dense)
     (Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Map (KeyHash 'StakePool) RewardProvenancePool
-> Encode
     ('Closed 'Dense) (Map (KeyHash 'StakePool) RewardProvenancePool)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Map (KeyHash 'StakePool) RewardProvenancePool
p15
        Encode
  ('Closed 'Dense)
  (Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
-> Encode ('Closed 'Dense) (Map (KeyHash 'StakePool) Desirability)
-> Encode ('Closed 'Dense) RewardProvenance
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Map (KeyHash 'StakePool) Desirability
-> Encode ('Closed 'Dense) (Map (KeyHash 'StakePool) Desirability)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Map (KeyHash 'StakePool) Desirability
p16

instance DecCBOR RewardProvenance where
  decCBOR :: forall s. Decoder s RewardProvenance
decCBOR =
    Decode ('Closed 'Dense) RewardProvenance
-> Decoder s RewardProvenance
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) RewardProvenance
 -> Decoder s RewardProvenance)
-> Decode ('Closed 'Dense) RewardProvenance
-> Decoder s RewardProvenance
forall a b. (a -> b) -> a -> b
$
      (Word64
 -> BlocksMade
 -> Coin
 -> Coin
 -> Coin
 -> Coin
 -> Coin
 -> Integer
 -> Rational
 -> Integer
 -> Rational
 -> Coin
 -> Coin
 -> Coin
 -> Map (KeyHash 'StakePool) RewardProvenancePool
 -> Map (KeyHash 'StakePool) Desirability
 -> RewardProvenance)
-> Decode
     ('Closed 'Dense)
     (Word64
      -> BlocksMade
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall t. t -> Decode ('Closed 'Dense) t
RecD Word64
-> BlocksMade
-> Coin
-> Coin
-> Coin
-> Coin
-> Coin
-> Integer
-> Rational
-> Integer
-> Rational
-> Coin
-> Coin
-> Coin
-> Map (KeyHash 'StakePool) RewardProvenancePool
-> Map (KeyHash 'StakePool) Desirability
-> RewardProvenance
RewardProvenance
        Decode
  ('Closed 'Dense)
  (Word64
   -> BlocksMade
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Word64
-> Decode
     ('Closed 'Dense)
     (BlocksMade
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Word64
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (BlocksMade
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) BlocksMade
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) BlocksMade
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Integer
      -> Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Integer
   -> Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Integer
-> Decode
     ('Closed 'Dense)
     (Rational
      -> Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Integer
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Rational
   -> Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Rational
-> Decode
     ('Closed 'Dense)
     (Integer
      -> Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Integer
   -> Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Integer
-> Decode
     ('Closed 'Dense)
     (Rational
      -> Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Integer
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Rational
   -> Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Rational
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Rational
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Coin
      -> Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability
      -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Coin
   -> Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability
   -> RewardProvenance)
-> Decode ('Closed Any) Coin
-> Decode
     ('Closed 'Dense)
     (Map (KeyHash 'StakePool) RewardProvenancePool
      -> Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Map (KeyHash 'StakePool) RewardProvenancePool
   -> Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
-> Decode
     ('Closed Any) (Map (KeyHash 'StakePool) RewardProvenancePool)
-> Decode
     ('Closed 'Dense)
     (Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode
  ('Closed Any) (Map (KeyHash 'StakePool) RewardProvenancePool)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Map (KeyHash 'StakePool) Desirability -> RewardProvenance)
-> Decode ('Closed Any) (Map (KeyHash 'StakePool) Desirability)
-> Decode ('Closed 'Dense) RewardProvenance
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Map (KeyHash 'StakePool) Desirability)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From