diff options
author | Greg Brown <greg.brown@cl.cam.ac.uk> | 2022-02-21 14:48:35 +0000 |
---|---|---|
committer | Greg Brown <greg.brown@cl.cam.ac.uk> | 2022-02-21 14:48:35 +0000 |
commit | c25d3de0bc41ed7f09ccda97b1cf16dfda09220c (patch) | |
tree | 969b3c9cc4464b3cbc67f28f1d1730dc4ccc49d9 /src/Helium/Data | |
parent | 281a29f01346bd2f00fbaca8391f38d856a45d6d (diff) |
Introduce tuple deconstructor expressions
Diffstat (limited to 'src/Helium/Data')
-rw-r--r-- | src/Helium/Data/Pseudocode/Core.agda | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/Helium/Data/Pseudocode/Core.agda b/src/Helium/Data/Pseudocode/Core.agda index 5cdf051..0e85c0d 100644 --- a/src/Helium/Data/Pseudocode/Core.agda +++ b/src/Helium/Data/Pseudocode/Core.agda @@ -157,6 +157,8 @@ module Code {o} (Σ : Vec Type o) where fin : ∀ {k ms n} → (All (Fin) ms → Fin n) → Expression Γ (tuple k (map fin ms)) → Expression Γ (fin n) asInt : ∀ {m} → Expression Γ (fin m) → Expression Γ int tup : ∀ {m ts} → All (Expression Γ) ts → Expression Γ (tuple m ts) + head : ∀ {m t ts} → Expression Γ (tuple (suc m) (t ∷ ts)) → Expression Γ t + tail : ∀ {m t ts} → Expression Γ (tuple (suc m) (t ∷ ts)) → Expression Γ (tuple m ts) call : ∀ {t m Δ} → Function Δ t → All (Expression Γ) {m} Δ → Expression Γ t if_then_else_ : ∀ {t} → Expression Γ bool → Expression Γ t → Expression Γ t → Expression Γ t @@ -198,6 +200,8 @@ module Code {o} (Σ : Vec Type o) where canAssign? (fin x e) = no λ () canAssign? (asInt e) = no λ () canAssign? (tup es) = map′ tup (λ { (tup es) → es }) (canAssignAll? es) + canAssign? (head e) = no λ () + canAssign? (tail e) = no λ () canAssign? (call x e) = no λ () canAssign? (if e then e₁ else e₂) = no λ () |