{-# OPTIONS --guardedness --sized-types #-}
module tmp.tmp where
open import Parser public
module _ where
Key : Set
Key = Nat
_≟ᴮKey_ : Key → Key → Bool
k₁ ≟ᴮKey k₂ = k₁ ≟ᴮNat k₂
showKey : Key → String
showKey k = showNat k
showKeys : List Key → String
showKeys ks = showNats ks
isKeyAuth : Key → Set
isKeyAuth _ = Unit
isKeyAuth? : ∀ k → Dec (isKeyAuth k)
isKeyAuth? k = yes _
reqKeyCount : Nat
reqKeyCount = 1
Tick = Nat
showTick : Tick → String
showTick t = showNat t
record TickRange : Set where
constructor _,_
field
lower : Tick
upper : Tick
open TickRange public
initialTickRange : TickRange
initialTickRange = 0 , 1
nextTickRange : TickRange → TickRange
nextTickRange t = 1 + t .lower , 1 + t .upper
showTickRange : TickRange → String
showTickRange t = "[" ++ showTick (t .lower) ++ "," ++ showTick (t .upper) ++ ")"
module TODO where
Value : Set
Value = Nat
record MkCfg {𝓈} (State : Set 𝓈) : Set 𝓈 where
constructor ⟨_,_⟩
field
state : State
value : Value
open MkCfg public
record Payment : Set where
constructor mkPayment
field
value : Value
recipient : Key
deadline : Tick
open Payment public
showPayment : Payment → String
showPayment p = "(" ++ showNat (p .value) ++ " " ++ showNat (p .recipient) ++ " " ++
showNat (p .deadline) ++ ")"
data PaymentParserErr : Set where
badValue : NatParserErr → PaymentParserErr
badRecipient : NatParserErr → PaymentParserErr
badDeadline : NatParserErr → PaymentParserErr
notPayment : Term → PaymentParserErr
showPaymentParserErr : PaymentParserErr → String
showPaymentParserErr (badValue err) = "invalid payment value: " ++ showNatParserErr err
showPaymentParserErr (badRecipient err) = "invalid payment recipient: " ++ showNatParserErr err
showPaymentParserErr (badDeadline err) = "invalid payment deadline: " ++ showNatParserErr err
showPaymentParserErr (notPayment tm) = "invalid payment '" ++ showTerm tm ++ "'"
PaymentParser : Set
PaymentParser = ∞Machine Term (Either PaymentParserErr Payment)
awaitPayment : PaymentParser
awaitPayment .on (list (tm₁ ∷ tm₂ ∷ tm₃ ∷ [])) with parseNat tm₁ | parseNat tm₂ | parseNat tm₃
... | fail err | _ | _ = fail (badValue err) , just awaitPayment
... | ok _ | fail err | _ = fail (badRecipient err) , just awaitPayment
... | ok _ | ok _ | fail err = fail (badDeadline err) , just awaitPayment
... | ok v | ok r | ok d = ok (mkPayment v r d) , just awaitPayment
awaitPayment .on tm = fail (notPayment tm) , just awaitPayment
parsePayment : Term → Either PaymentParserErr Payment
parsePayment tm = ∞MachineThings.GetEither.step awaitPayment tm