PLFA agda exercises
### Identifier maps

\begin{code}
_∈?_ : ∀ (x : Id) → (xs : List Id) → Dec (x ∈ xs)
x ∈? xs = {!!}

data IdMap : Set where
  make : ∀ (xs : List Id) → (φ : ∀ {x} → x ∈ xs → Term) → IdMap

default : List Id → IdMap
default xs = make xs φ
  where
  φ : ∀ {x : Id} (x∈ : x ∈ xs) → Term
  φ {x} x∈  =  ` x

∅ : IdMap
∅ = make [] (λ())

infixl 5 _,_↦_

_,_↦_ : IdMap → Id → Term → IdMap
make xs φ , x ↦ M  = make xs′ φ′
  where
  xs′ = x ∷ xs
  φ′ : ∀ {x} → x ∈ xs′ → Term
  φ′ here        =  M
  φ′ (there x∈)  =  φ x∈
\end{code}