From ea93da59e140a1714af1dbee36db72d4cd3bc136 Mon Sep 17 00:00:00 2001 From: Armando Santos Date: Tue, 13 Jun 2023 17:04:33 +0100 Subject: [PATCH] Added SomeBlockType and reflBlockType --- cardano-api/internal/Cardano/Api/Protocol.hs | 16 ++++++++++++++++ cardano-api/src/Cardano/Api.hs | 2 ++ 2 files changed, 18 insertions(+) diff --git a/cardano-api/internal/Cardano/Api/Protocol.hs b/cardano-api/internal/Cardano/Api/Protocol.hs index 43a89a6393..3a940590eb 100644 --- a/cardano-api/internal/Cardano/Api/Protocol.hs +++ b/cardano-api/internal/Cardano/Api/Protocol.hs @@ -6,9 +6,12 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} module Cardano.Api.Protocol ( BlockType(..) + , SomeBlockType (..) + , reflBlockType , Protocol(..) , ProtocolInfoArgs(..) , ProtocolClient(..) @@ -36,6 +39,8 @@ import Ouroboros.Consensus.Shelley.Node.Praos import Ouroboros.Consensus.Shelley.ShelleyHFC (ShelleyBlockHFC) import Ouroboros.Consensus.Util.IOLike (IOLike) +import Type.Reflection ((:~:) (..)) + class (RunNode blk, IOLike m) => Protocol m blk where data ProtocolInfoArgs blk protocolInfo :: ProtocolInfoArgs blk -> (ProtocolInfo blk, m [BlockForging m blk]) @@ -147,3 +152,14 @@ data BlockType blk where deriving instance Eq (BlockType blk) deriving instance Show (BlockType blk) +reflBlockType :: BlockType blk -> BlockType blk' -> Maybe (blk :~: blk') +reflBlockType ByronBlockType ByronBlockType = Just Refl +reflBlockType ShelleyBlockType ShelleyBlockType = Just Refl +reflBlockType CardanoBlockType CardanoBlockType = Just Refl +reflBlockType _ _ = Nothing + + +data SomeBlockType where + SomeBlockType :: BlockType blk -> SomeBlockType + +deriving instance Show SomeBlockType diff --git a/cardano-api/src/Cardano/Api.hs b/cardano-api/src/Cardano/Api.hs index c26106dbad..57f47906f9 100644 --- a/cardano-api/src/Cardano/Api.hs +++ b/cardano-api/src/Cardano/Api.hs @@ -698,6 +698,8 @@ module Cardano.Api ( -- ** Protocol related types BlockType(..), + SomeBlockType (..), + reflBlockType, Protocol(..), ProtocolInfoArgs(..),