{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Allegra.Imp (spec) where

import Cardano.Ledger.Allegra (AllegraEra)
import Cardano.Ledger.Core
import Cardano.Ledger.Shelley.Rules
import Test.Cardano.Ledger.Allegra.ImpTest
import Test.Cardano.Ledger.Imp.Common
import qualified Test.Cardano.Ledger.Shelley.Imp as ShelleyImp

spec ::
  forall era.
  ( ShelleyEraImp era
  , EraSpecificSpec era
  , Event (EraRule "RUPD" era) ~ RupdEvent
  ) =>
  Spec
spec :: forall era.
(ShelleyEraImp era, EraSpecificSpec era,
 Event (EraRule "RUPD" era) ~ RupdEvent) =>
Spec
spec = do
  forall era.
(ShelleyEraImp era, EraSpecificSpec era,
 Event (EraRule "RUPD" era) ~ RupdEvent) =>
Spec
ShelleyImp.spec @era

instance EraSpecificSpec AllegraEra where
  eraSpecificSpec :: SpecWith (ImpInit (LedgerSpec AllegraEra))
eraSpecificSpec = SpecWith (ImpInit (LedgerSpec AllegraEra))
forall era.
(ShelleyEraImp era, ShelleyEraAccounts era) =>
SpecWith (ImpInit (LedgerSpec era))
ShelleyImp.shelleyEraSpecificSpec