File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ module Week6 where
2+
3+ open import Data.Nat.Base using (ℕ; _+_)
4+ open import Data.Bool.Base using (Bool; if_then_else_)
5+ open import Data.List.Base using (List; []; _∷_)
6+
7+ data Ty : Set where
8+ bool nat : Ty
9+
10+
11+
12+ infix 0 _∈_
13+ data _∈_ {A : Set } (a : A) : List A → Set where
14+ -- nonsense : a ∈ []
15+ here : ∀ {xs} → a ∈ (a ∷ xs)
16+ there : ∀ {x xs} → a ∈ xs → a ∈ (x ∷ xs)
17+
18+ data TExpr (Γ : List Ty) : Ty -> Set where
19+ var : ∀ {σ} → σ ∈ Γ → TExpr Γ σ
20+ ------------------------ old same
21+ nat : ℕ -> TExpr Γ nat
22+ bool : Bool -> TExpr Γ bool
23+ add : TExpr Γ nat -> TExpr Γ nat ->
24+ -------------------------------------
25+ TExpr Γ nat
26+ ifte : forall {T} ->
27+ TExpr Γ bool ->
28+ TExpr Γ T -> TExpr Γ T ->
29+ ------------------------------------
30+ TExpr Γ T
31+
32+ TVal : Ty → Set
33+ TVal bool = Bool
34+ TVal nat = ℕ
35+
36+ Env : (Γ : List Ty) → Set
37+ Env Γ = (x : Ty) → x ∈ Γ → TVal x
38+
39+ teval : forall {T Γ} -> Env Γ → TExpr Γ T -> TVal T
40+ teval {T} ρ (var x) = ρ T x
41+ teval ρ (nat n) = n
42+ teval ρ (bool b) = b
43+ teval ρ (add en em) = teval ρ en + teval ρ em
44+ teval ρ (ifte eb et ee) = if teval ρ eb then teval ρ et else teval ρ ee
You can’t perform that action at this time.
0 commit comments