open import Data.Fin using (Fin)
open import Data.Nat using (ℕ; suc)
module CBV.Monadic.Terms where
variable n : ℕ
variable m : Fin n
mutual
data Value (n : ℕ) : Set where
unit : Value n
ƛ_ : Exp (suc n) → Value n
#_ : Fin n → Value n
data Exp (n : ℕ) : Set where
val : Value n → Exp n
_·_ : Exp n → Exp n → Exp n
_»_ : Exp n → Exp n → Exp n
return_ : Exp n → Exp n
$⟵_⋯_ : Exp n → Exp (suc n) → Exp n
tick : Exp n
variable v : Value n
variable e e′ e₁ e₂ : Exp n
infix 5 ƛ_
infixl 7 _»_
infix 6 return_
infixl 7 _·_
infix 9 #_
infixr 5 $⟵_⋯_