25.10.2015 Views

Write You a Haskell Stephen Diehl

1kEcQTb

1kEcQTb

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

• T-Var Variables are simply pulled from the context.<br />

• T-Lam lambdas introduce a typed variable into the environment when inferring the body.<br />

• T-App Applications of a lambda with type t1 -> t2 to a value of type t1 yields a value of type<br />

t2.<br />

x : σ ∈ Γ<br />

Γ ⊢ x : σ<br />

Γ, x : τ 1 ⊢ e : τ 2<br />

Γ ⊢ λx : τ 1 .e : τ 1 → τ 2<br />

Γ ⊢ e 1 : τ 1 → τ 2 Γ ⊢ e 2 : τ 1<br />

Γ ⊢ e 1 e 2 : τ 2<br />

Γ ⊢ c : Bool Γ ⊢ e 1 : τ Γ ⊢ e 2 : τ<br />

Γ ⊢ if c then e 1 else e 2 : τ<br />

Γ ⊢ n : Int<br />

Γ ⊢ True : Bool<br />

Γ ⊢ False : Bool<br />

(T-Var)<br />

(T-Lam)<br />

(T-App)<br />

(T-If)<br />

(T-Int)<br />

(T-True)<br />

(T-False)<br />

e evaluation rules describe the nature by which values transition between other values and determine<br />

the runtime behavior of the program.<br />

e 1 → e ′ 1<br />

e 1 e 2 → e ′ 1 e 2<br />

e 2 → e ′ 2<br />

v 1 e 2 → v 1 e ′ 2<br />

(λx : τ.e 1 )v 2 → [x/v 2 ]e 1<br />

if True then e 2 else e 3 → e 2<br />

if False then e 2 else e 3 → e 3<br />

e 1 → e ′ 1<br />

if e 1 then e 2 else e 3 → if e ′ 1 then e 2 else e 3<br />

(E-App1)<br />

(E-App2)<br />

(E-AppLam)<br />

(E-IfTrue)<br />

(E-IfFalse)<br />

(E-If)<br />

Since we now have the notion of scoped variables for lambda, we will implement a typing environment<br />

Env as manifest as Γ in our typing rules.<br />

63

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!