Skip to content

Commit

Permalink
Add Inject instances for Eons
Browse files Browse the repository at this point in the history
  • Loading branch information
carbolymer committed Sep 13, 2024
1 parent eb2108c commit ed7d553
Show file tree
Hide file tree
Showing 13 changed files with 140 additions and 40 deletions.
20 changes: 14 additions & 6 deletions cardano-api/internal/Cardano/Api/Eon/AllegraEraOnwards.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -66,6 +67,17 @@ instance ToCardanoEra AllegraEraOnwards where
AllegraEraOnwardsBabbage -> BabbageEra
AllegraEraOnwardsConway -> ConwayEra

instance Inject (AllegraEraOnwards era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (AllegraEraOnwards era) (ShelleyBasedEra era) where
inject = \case
AllegraEraOnwardsAllegra -> ShelleyBasedEraAllegra
AllegraEraOnwardsMary -> ShelleyBasedEraMary
AllegraEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
AllegraEraOnwardsBabbage -> ShelleyBasedEraBabbage
AllegraEraOnwardsConway -> ShelleyBasedEraConway

type AllegraEraOnwardsConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -103,13 +115,9 @@ allegraEraOnwardsConstraints = \case
AllegraEraOnwardsBabbage -> id
AllegraEraOnwardsConway -> id

{-# DEPRECATED allegraEraOnwardsToShelleyBasedEra "Use 'inject' instead." #-}
allegraEraOnwardsToShelleyBasedEra :: AllegraEraOnwards era -> ShelleyBasedEra era
allegraEraOnwardsToShelleyBasedEra = \case
AllegraEraOnwardsAllegra -> ShelleyBasedEraAllegra
AllegraEraOnwardsMary -> ShelleyBasedEraMary
AllegraEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
AllegraEraOnwardsBabbage -> ShelleyBasedEraBabbage
AllegraEraOnwardsConway -> ShelleyBasedEraConway
allegraEraOnwardsToShelleyBasedEra = inject

class IsAllegraBasedEra era where
allegraBasedEra :: AllegraEraOnwards era
Expand Down
16 changes: 12 additions & 4 deletions cardano-api/internal/Cardano/Api/Eon/AlonzoEraOnwards.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -69,6 +70,15 @@ instance ToCardanoEra AlonzoEraOnwards where
AlonzoEraOnwardsBabbage -> BabbageEra
AlonzoEraOnwardsConway -> ConwayEra

instance Inject (AlonzoEraOnwards era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (AlonzoEraOnwards era) (ShelleyBasedEra era) where
inject = \case
AlonzoEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
AlonzoEraOnwardsBabbage -> ShelleyBasedEraBabbage
AlonzoEraOnwardsConway -> ShelleyBasedEraConway

type AlonzoEraOnwardsConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -113,11 +123,9 @@ alonzoEraOnwardsConstraints = \case
AlonzoEraOnwardsBabbage -> id
AlonzoEraOnwardsConway -> id

{-# DEPRECATED alonzoEraOnwardsToShelleyBasedEra "Use 'inject' instead." #-}
alonzoEraOnwardsToShelleyBasedEra :: AlonzoEraOnwards era -> ShelleyBasedEra era
alonzoEraOnwardsToShelleyBasedEra = \case
AlonzoEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
AlonzoEraOnwardsBabbage -> ShelleyBasedEraBabbage
AlonzoEraOnwardsConway -> ShelleyBasedEraConway
alonzoEraOnwardsToShelleyBasedEra = inject

class IsAlonzoBasedEra era where
alonzoBasedEra :: AlonzoEraOnwards era
Expand Down
14 changes: 11 additions & 3 deletions cardano-api/internal/Cardano/Api/Eon/BabbageEraOnwards.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -65,6 +66,14 @@ instance ToCardanoEra BabbageEraOnwards where
BabbageEraOnwardsBabbage -> BabbageEra
BabbageEraOnwardsConway -> ConwayEra

instance Inject (BabbageEraOnwards era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (BabbageEraOnwards era) (ShelleyBasedEra era) where
inject = \case
BabbageEraOnwardsBabbage -> ShelleyBasedEraBabbage
BabbageEraOnwardsConway -> ShelleyBasedEraConway

type BabbageEraOnwardsConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -108,10 +117,9 @@ babbageEraOnwardsConstraints = \case
BabbageEraOnwardsBabbage -> id
BabbageEraOnwardsConway -> id

{-# DEPRECATED babbageEraOnwardsToShelleyBasedEra "Use 'inject' instead." #-}
babbageEraOnwardsToShelleyBasedEra :: BabbageEraOnwards era -> ShelleyBasedEra era
babbageEraOnwardsToShelleyBasedEra = \case
BabbageEraOnwardsBabbage -> ShelleyBasedEraBabbage
BabbageEraOnwardsConway -> ShelleyBasedEraConway
babbageEraOnwardsToShelleyBasedEra = inject

class IsBabbageBasedEra era where
babbageBasedEra :: BabbageEraOnwards era
Expand Down
4 changes: 4 additions & 0 deletions cardano-api/internal/Cardano/Api/Eon/ByronToAlonzoEra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -47,6 +48,9 @@ instance ToCardanoEra ByronToAlonzoEra where
ByronToAlonzoEraMary -> MaryEra
ByronToAlonzoEraAlonzo -> AlonzoEra

instance Inject (ByronToAlonzoEra era) (CardanoEra era) where
inject = toCardanoEra

type ByronToAlonzoEraConstraints era =
( IsCardanoEra era
, Typeable era
Expand Down
22 changes: 20 additions & 2 deletions cardano-api/internal/Cardano/Api/Eon/ConwayEraOnwards.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand All @@ -12,11 +13,13 @@ module Cardano.Api.Eon.ConwayEraOnwards
( ConwayEraOnwards (..)
, conwayEraOnwardsConstraints
, conwayEraOnwardsToShelleyBasedEra
, conwayEraOnwardsToBabbageEraOnwards
, ConwayEraOnwardsConstraints
, IsConwayBasedEra (..)
)
where

import Cardano.Api.Eon.BabbageEraOnwards
import Cardano.Api.Eon.ShelleyBasedEra
import Cardano.Api.Eras.Core
import Cardano.Api.Modes
Expand Down Expand Up @@ -64,6 +67,17 @@ instance ToCardanoEra ConwayEraOnwards where
toCardanoEra = \case
ConwayEraOnwardsConway -> ConwayEra

instance Inject (ConwayEraOnwards era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (ConwayEraOnwards era) (ShelleyBasedEra era) where
inject = \case
ConwayEraOnwardsConway -> ShelleyBasedEraConway

instance Inject (ConwayEraOnwards era) (BabbageEraOnwards era) where
inject = \case
ConwayEraOnwardsConway -> BabbageEraOnwardsConway

type ConwayEraOnwardsConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -110,9 +124,13 @@ conwayEraOnwardsConstraints
conwayEraOnwardsConstraints = \case
ConwayEraOnwardsConway -> id

{-# DEPRECATED conwayEraOnwardsToShelleyBasedEra "Use 'inject' instead." #-}
conwayEraOnwardsToShelleyBasedEra :: ConwayEraOnwards era -> ShelleyBasedEra era
conwayEraOnwardsToShelleyBasedEra = \case
ConwayEraOnwardsConway -> ShelleyBasedEraConway
conwayEraOnwardsToShelleyBasedEra = inject

{-# DEPRECATED conwayEraOnwardsToBabbageEraOnwards "Use 'inject' instead." #-}
conwayEraOnwardsToBabbageEraOnwards :: ConwayEraOnwards era -> BabbageEraOnwards era
conwayEraOnwardsToBabbageEraOnwards = inject

class IsConwayBasedEra era where
conwayBasedEra :: ConwayEraOnwards era
Expand Down
18 changes: 13 additions & 5 deletions cardano-api/internal/Cardano/Api/Eon/MaryEraOnwards.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -66,6 +67,16 @@ instance ToCardanoEra MaryEraOnwards where
MaryEraOnwardsBabbage -> BabbageEra
MaryEraOnwardsConway -> ConwayEra

instance Inject (MaryEraOnwards era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (MaryEraOnwards era) (ShelleyBasedEra era) where
inject = \case
MaryEraOnwardsMary -> ShelleyBasedEraMary
MaryEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
MaryEraOnwardsBabbage -> ShelleyBasedEraBabbage
MaryEraOnwardsConway -> ShelleyBasedEraConway

type MaryEraOnwardsConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -104,12 +115,9 @@ maryEraOnwardsConstraints = \case
MaryEraOnwardsBabbage -> id
MaryEraOnwardsConway -> id

{-# DEPRECATED maryEraOnwardsToShelleyBasedEra "Use 'inject' instead." #-}
maryEraOnwardsToShelleyBasedEra :: MaryEraOnwards era -> ShelleyBasedEra era
maryEraOnwardsToShelleyBasedEra = \case
MaryEraOnwardsMary -> ShelleyBasedEraMary
MaryEraOnwardsAlonzo -> ShelleyBasedEraAlonzo
MaryEraOnwardsBabbage -> ShelleyBasedEraBabbage
MaryEraOnwardsConway -> ShelleyBasedEraConway
maryEraOnwardsToShelleyBasedEra = inject

class IsMaryBasedEra era where
maryBasedEra :: MaryEraOnwards era
Expand Down
5 changes: 5 additions & 0 deletions cardano-api/internal/Cardano/Api/Eon/ShelleyBasedEra.hs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
Expand Down Expand Up @@ -177,6 +179,9 @@ instance ToCardanoEra ShelleyBasedEra where
ShelleyBasedEraBabbage -> BabbageEra
ShelleyBasedEraConway -> ConwayEra

instance Inject (ShelleyBasedEra era) (CardanoEra era) where
inject = toCardanoEra

-- | The class of eras that are based on Shelley. This allows uniform handling
-- of Shelley-based eras, but also non-uniform by making case distinctions on
-- the 'ShelleyBasedEra' constructors.
Expand Down
12 changes: 10 additions & 2 deletions cardano-api/internal/Cardano/Api/Eon/ShelleyEraOnly.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -59,6 +60,13 @@ instance ToCardanoEra ShelleyEraOnly where
toCardanoEra = \case
ShelleyEraOnlyShelley -> ShelleyEra

instance Inject (ShelleyEraOnly era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (ShelleyEraOnly era) (ShelleyBasedEra era) where
inject = \case
ShelleyEraOnlyShelley -> ShelleyBasedEraShelley

type ShelleyEraOnlyConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -99,6 +107,6 @@ shelleyEraOnlyConstraints
shelleyEraOnlyConstraints = \case
ShelleyEraOnlyShelley -> id

{-# DEPRECATED shelleyEraOnlyToShelleyBasedEra "Use 'inject' instead." #-}
shelleyEraOnlyToShelleyBasedEra :: ShelleyEraOnly era -> ShelleyBasedEra era
shelleyEraOnlyToShelleyBasedEra = \case
ShelleyEraOnlyShelley -> ShelleyBasedEraShelley
shelleyEraOnlyToShelleyBasedEra = inject
14 changes: 11 additions & 3 deletions cardano-api/internal/Cardano/Api/Eon/ShelleyToAllegraEra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -62,6 +63,14 @@ instance ToCardanoEra ShelleyToAllegraEra where
ShelleyToAllegraEraShelley -> ShelleyEra
ShelleyToAllegraEraAllegra -> AllegraEra

instance Inject (ShelleyToAllegraEra era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (ShelleyToAllegraEra era) (ShelleyBasedEra era) where
inject = \case
ShelleyToAllegraEraShelley -> ShelleyBasedEraShelley
ShelleyToAllegraEraAllegra -> ShelleyBasedEraAllegra

type ShelleyToAllegraEraConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -102,7 +111,6 @@ shelleyToAllegraEraConstraints = \case
ShelleyToAllegraEraShelley -> id
ShelleyToAllegraEraAllegra -> id

{-# DEPRECATED shelleyToAllegraEraToShelleyBasedEra "Use 'inject' instead." #-}
shelleyToAllegraEraToShelleyBasedEra :: ShelleyToAllegraEra era -> ShelleyBasedEra era
shelleyToAllegraEraToShelleyBasedEra = \case
ShelleyToAllegraEraShelley -> ShelleyBasedEraShelley
ShelleyToAllegraEraAllegra -> ShelleyBasedEraAllegra
shelleyToAllegraEraToShelleyBasedEra = inject
17 changes: 12 additions & 5 deletions cardano-api/internal/Cardano/Api/Eon/ShelleyToAlonzoEra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -64,6 +65,16 @@ instance ToCardanoEra ShelleyToAlonzoEra where
ShelleyToAlonzoEraMary -> MaryEra
ShelleyToAlonzoEraAlonzo -> AlonzoEra

instance Inject (ShelleyToAlonzoEra era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (ShelleyToAlonzoEra era) (ShelleyBasedEra era) where
inject = \case
ShelleyToAlonzoEraShelley -> ShelleyBasedEraShelley
ShelleyToAlonzoEraAllegra -> ShelleyBasedEraAllegra
ShelleyToAlonzoEraMary -> ShelleyBasedEraMary
ShelleyToAlonzoEraAlonzo -> ShelleyBasedEraAlonzo

type ShelleyToAlonzoEraConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -104,8 +115,4 @@ shelleyToAlonzoEraConstraints = \case
ShelleyToAlonzoEraAlonzo -> id

shelleyToAlonzoEraToShelleyBasedEra :: ShelleyToAlonzoEra era -> ShelleyBasedEra era
shelleyToAlonzoEraToShelleyBasedEra = \case
ShelleyToAlonzoEraShelley -> ShelleyBasedEraShelley
ShelleyToAlonzoEraAllegra -> ShelleyBasedEraAllegra
ShelleyToAlonzoEraMary -> ShelleyBasedEraMary
ShelleyToAlonzoEraAlonzo -> ShelleyBasedEraAlonzo
shelleyToAlonzoEraToShelleyBasedEra = inject
20 changes: 14 additions & 6 deletions cardano-api/internal/Cardano/Api/Eon/ShelleyToBabbageEra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
Expand Down Expand Up @@ -66,6 +67,17 @@ instance ToCardanoEra ShelleyToBabbageEra where
ShelleyToBabbageEraAlonzo -> AlonzoEra
ShelleyToBabbageEraBabbage -> BabbageEra

instance Inject (ShelleyToBabbageEra era) (CardanoEra era) where
inject = toCardanoEra

instance Inject (ShelleyToBabbageEra era) (ShelleyBasedEra era) where
inject = \case
ShelleyToBabbageEraShelley -> ShelleyBasedEraShelley
ShelleyToBabbageEraAllegra -> ShelleyBasedEraAllegra
ShelleyToBabbageEraMary -> ShelleyBasedEraMary
ShelleyToBabbageEraAlonzo -> ShelleyBasedEraAlonzo
ShelleyToBabbageEraBabbage -> ShelleyBasedEraBabbage

type ShelleyToBabbageEraConstraints era =
( C.HashAlgorithm (L.HASH (L.EraCrypto (ShelleyLedgerEra era)))
, C.Signable (L.VRF (L.EraCrypto (ShelleyLedgerEra era))) L.Seed
Expand Down Expand Up @@ -105,10 +117,6 @@ shelleyToBabbageEraConstraints = \case
ShelleyToBabbageEraAlonzo -> id
ShelleyToBabbageEraBabbage -> id

{-# DEPRECATED shelleyToBabbageEraToShelleyBasedEra "Use 'inject' instead." #-}
shelleyToBabbageEraToShelleyBasedEra :: ShelleyToBabbageEra era -> ShelleyBasedEra era
shelleyToBabbageEraToShelleyBasedEra = \case
ShelleyToBabbageEraShelley -> ShelleyBasedEraShelley
ShelleyToBabbageEraAllegra -> ShelleyBasedEraAllegra
ShelleyToBabbageEraMary -> ShelleyBasedEraMary
ShelleyToBabbageEraAlonzo -> ShelleyBasedEraAlonzo
ShelleyToBabbageEraBabbage -> ShelleyBasedEraBabbage
shelleyToBabbageEraToShelleyBasedEra = inject
Loading

0 comments on commit ed7d553

Please sign in to comment.