module Ledger.Dijkstra.Foreign.Utxo where

open import Data.Integer using ()

open import Foreign.Convertible
open import Foreign.Convertible.Deriving
open import Foreign.HaskellTypes
open import Foreign.HaskellTypes.Deriving

open import Ledger.Prelude
open import Ledger.Prelude.Foreign.HSTypes

open import Ledger.Core.Foreign.Address
open import Ledger.Dijkstra.Foreign.HSStructures
open import Ledger.Dijkstra.Foreign.PParams
open import Ledger.Dijkstra.Foreign.Cert
open import Ledger.Dijkstra.Foreign.Gov
open import Ledger.Dijkstra.Foreign.Rewards
open import Ledger.Dijkstra.Foreign.Transaction
open import Ledger.Dijkstra.Specification.Utxo it DummyAbstractFunctions
open import Ledger.Dijkstra.Specification.Utxow.Properties.Computational it DummyAbstractFunctions
open import Ledger.Dijkstra.Specification.Utxo.Properties.Computational it DummyAbstractFunctions

open Computational

private
  toHsConstr : String  String
  toHsConstr c = if c  "utxo₀" then "utxo0" else c

instance
  HsTy-DepositsChange = autoHsType DepositsChange  withConstructor "MkDepositsChange"
                                                     fieldPrefix "dc"
  Conv-DepositsChange = autoConvert DepositsChange

  HsTy-UTxOEnv = autoHsType UTxOEnv  withConstructor "MkUTxOEnv"
                                       fieldPrefix "ue"
                                       onConstructors toHsConstr
  Conv-UTxOEnv = autoConvert UTxOEnv

  HsTy-SubUTxOEnv = autoHsType SubUTxOEnv  withConstructor "MkSubUTxOEnv"
                                             fieldPrefix "sue"
  Conv-SubUTxOEnv = autoConvert SubUTxOEnv

  HsTy-UTxOState = autoHsType UTxOState  withConstructor "MkUTxOState"
                                           fieldPrefix "us"
  Conv-UTxOState = autoConvert UTxOState

unquoteDecl = do
  hsTypeAlias UTxO
  
utxo-step : HsType (UTxOEnv × Bool  UTxOState  Tx TxLevelTop  ComputationResult String UTxOState)
utxo-step = to (compute Computational-UTXO)

{-# COMPILE GHC utxo-step as utxoStep #-}

utxow-step : HsType (UTxOEnv  UTxOState  Tx TxLevelTop  ComputationResult String UTxOState)
utxow-step = to (compute Computational-UTXOW)

{-# COMPILE GHC utxow-step as utxowStep #-}