module Ledger.Dijkstra.Foreign.Account where

open import Class.Convertible
open import Class.Convertible.Foreign
open import Tactic.Derive.Convertible
open import Class.HasHsType
open import Class.HasHsType.Foreign
open import Tactic.Derive.HsType
import Data.String as S

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

open import Ledger.Core.Foreign.Address
open import Ledger.Core.Foreign.Crypto.Base
open import Ledger.Dijkstra.Foreign.HSStructures

private
  toHaskellConstr : String  String
  toHaskellConstr s =
    if      s  "⟦_,_⦆" then "Both"
    else if s  "⟦_,∞⦆" then "Lower"
    else if s  "⟦0,_⦆" then "Upper"
    else s

instance
  HsTy-BalanceInterval = autoHsType BalanceInterval  onConstructors toHaskellConstr
  Conv-BalanceInterval = autoConvert BalanceInterval