-- GHC 7.8+ supports EmptyCase for this, but the warnings for that
  -- construct don't work yet.

-- | Evaluate an expression, using big-step semantics.
eval :: Exp '[] t -> Val t
eval (Var v)          = impossibleVar v
eval :: Exp '[] t -> Val t
eval (Var v)          = impossibleVar v
eval (Var v)          = impossibleVar v