, evalVar:
evalVar :: String -> [PPair] -> Expr ?
? is a, , a. "an Expr " :
data SomeExpr where
SomeExpr :: Expr a -> SomeExpr
, , RankNTypes, GADTs:
data SomeExpr = forall a. SomeExpr (Expr a)
. PPair SomeExpr:
data PPair = PPair String SomeExpr
evalVar :
evalVar k (PPair kk v : xs)
| k == kk = v
| otherwise = evalVar k xs
(, [(String,SomeExpr)] lookup.)
, , , Haskell, , , ; , Agda, , , , -, Haskell , , , , .
, , ; GADT. , , , , , , .
, , , ; Var a, , :
data PPair where
PPair :: Var a -> Expr a -> PPair
evalVar :: Var a -> [PPair] -> Maybe (Expr a)
- vault; Key ST IO Vault . Map, . , Var a Key (Expr a) Vault [PPair]. ( : .)
, Key, Key , . ( , Var , , , .)
(, GADT, : data PPair where PPair :: String -> Expr a -> PPair.)