{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UndecidableInstances #-}
-- CanStartFromGenesis
{-# OPTIONS_GHC -Wno-deprecations #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Mary (
  Mary,
  MaryEra,
  ShelleyTx,
  ShelleyTxOut,
  MaryValue,
  MaryTxBody,
)
where

import Cardano.Ledger.Core
import Cardano.Ledger.Crypto (Crypto, StandardCrypto)
import Cardano.Ledger.Genesis (NoGenesis (..))
import Cardano.Ledger.Keys (DSignable)
import Cardano.Ledger.Mary.Era (MaryEra)
import Cardano.Ledger.Mary.PParams ()
import Cardano.Ledger.Mary.Rules ()
import Cardano.Ledger.Mary.Scripts ()
import Cardano.Ledger.Mary.Transition ()
import Cardano.Ledger.Mary.Translation ()
import Cardano.Ledger.Mary.TxAuxData ()
import Cardano.Ledger.Mary.TxBody (MaryTxBody)
import Cardano.Ledger.Mary.TxSeq ()
import Cardano.Ledger.Mary.UTxO ()
import Cardano.Ledger.Mary.Value (MaryValue)
import Cardano.Ledger.Shelley.API

type Mary = MaryEra StandardCrypto

instance
  (Crypto c, DSignable c (Hash c EraIndependentTxBody)) =>
  ApplyTx (MaryEra c)

instance
  (Crypto c, DSignable c (Hash c EraIndependentTxBody)) =>
  ApplyBlock (MaryEra c)

instance Crypto c => CanStartFromGenesis (MaryEra c) where
  fromShelleyPParams :: AdditionalGenesisConfig (MaryEra c)
-> PParams (ShelleyEra (EraCrypto (MaryEra c)))
-> PParams (MaryEra c)
fromShelleyPParams () = forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' forall era. NoGenesis era
NoGenesis forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era.
CanStartFromGenesis era =>
AdditionalGenesisConfig era
-> PParams (ShelleyEra (EraCrypto era)) -> PParams era
fromShelleyPParams ()