{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}

module Cardano.Api.Internal.Experimental.Simple.Script
  ( SimpleScript (..)
  , SimpleScriptOrReferenceInput (..)
  )
where

import Cardano.Api.Internal.TxIn (TxIn)

import Cardano.Ledger.Core qualified as Ledger

-- | A simple script in a particular era. We leverage ledger's Cardano.Api.Experimental.ErasraScript
-- type class methods to work with the script.
data SimpleScript era where
  SimpleScript :: Ledger.EraScript era => Ledger.NativeScript era -> SimpleScript era

deriving instance Show (SimpleScript era)

data SimpleScriptOrReferenceInput era
  = SScript (SimpleScript era)
  | SReferenceScript TxIn
  deriving Int -> SimpleScriptOrReferenceInput era -> ShowS
[SimpleScriptOrReferenceInput era] -> ShowS
SimpleScriptOrReferenceInput era -> String
(Int -> SimpleScriptOrReferenceInput era -> ShowS)
-> (SimpleScriptOrReferenceInput era -> String)
-> ([SimpleScriptOrReferenceInput era] -> ShowS)
-> Show (SimpleScriptOrReferenceInput era)
forall era. Int -> SimpleScriptOrReferenceInput era -> ShowS
forall era. [SimpleScriptOrReferenceInput era] -> ShowS
forall era. SimpleScriptOrReferenceInput era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> SimpleScriptOrReferenceInput era -> ShowS
showsPrec :: Int -> SimpleScriptOrReferenceInput era -> ShowS
$cshow :: forall era. SimpleScriptOrReferenceInput era -> String
show :: SimpleScriptOrReferenceInput era -> String
$cshowList :: forall era. [SimpleScriptOrReferenceInput era] -> ShowS
showList :: [SimpleScriptOrReferenceInput era] -> ShowS
Show