{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.State.Stake () where

import Cardano.Ledger.Conway.State (
  ConwayInstantStake,
  EraStake (..),
  addConwayInstantStake,
  conwayInstantStakeCredentialsL,
  deleteConwayInstantStake,
  resolveConwayInstantStake,
 )
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.TxOut ()

instance EraStake DijkstraEra where
  type InstantStake DijkstraEra = ConwayInstantStake DijkstraEra
  instantStakeCredentialsL :: Lens'
  (InstantStake DijkstraEra)
  (Map (Credential 'Staking) (CompactForm Coin))
instantStakeCredentialsL = (Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> InstantStake DijkstraEra -> f (InstantStake DijkstraEra)
(Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> ConwayInstantStake DijkstraEra
-> f (ConwayInstantStake DijkstraEra)
forall era (f :: * -> *).
Functor f =>
(Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> ConwayInstantStake era -> f (ConwayInstantStake era)
conwayInstantStakeCredentialsL
  addInstantStake :: UTxO DijkstraEra
-> InstantStake DijkstraEra -> InstantStake DijkstraEra
addInstantStake = UTxO DijkstraEra
-> InstantStake DijkstraEra -> InstantStake DijkstraEra
UTxO DijkstraEra
-> ConwayInstantStake DijkstraEra -> ConwayInstantStake DijkstraEra
forall era.
EraTxOut era =>
UTxO era -> ConwayInstantStake era -> ConwayInstantStake era
addConwayInstantStake
  deleteInstantStake :: UTxO DijkstraEra
-> InstantStake DijkstraEra -> InstantStake DijkstraEra
deleteInstantStake = UTxO DijkstraEra
-> InstantStake DijkstraEra -> InstantStake DijkstraEra
UTxO DijkstraEra
-> ConwayInstantStake DijkstraEra -> ConwayInstantStake DijkstraEra
forall era.
EraTxOut era =>
UTxO era -> ConwayInstantStake era -> ConwayInstantStake era
deleteConwayInstantStake
  resolveInstantStake :: InstantStake DijkstraEra -> UMap -> Stake
resolveInstantStake = InstantStake DijkstraEra -> UMap -> Stake
ConwayInstantStake DijkstraEra -> UMap -> Stake
forall era.
(EraStake era, InstantStake era ~ ConwayInstantStake era) =>
ConwayInstantStake era -> UMap -> Stake
resolveConwayInstantStake