【发布时间】:2012-11-18 21:36:11
【问题描述】:
作为我在 Haskell 中编写的迷你解释器的一部分,我正在编写一个执行以下操作的函数:如果是 eval (App e1 e2),我想递归评估 e1 (eval e1),设置结果到v1。然后使用 Switch/Case,我想检查 v1 的模式,如果不是错误,则递归评估 e2 (eval e2) 并将该值设置为 v2。使用这两个值 v1 和 v2,然后我对这些值应用另一个函数 (appVals)。
eval :: Exp -> Error Val
eval (App e1 e2) = appVals v1 v2 where
v1 = case (eval e1) of
Error err -> Error "Not an application"
/= Error err -> eval e1 = v1
v2 = case (eval e2) of
Error err -> Error "Not an application"
/= Error err -> eval e2 = v2
我想我可能已经弄清楚了,但我不完全确定我是否正确地完成了开关/外壳部分。有什么想法/建议吗?
【问题讨论】:
-
仅供参考,这(创建“迷你语言”)是利用 GADT 的好东西 -- en.wikibooks.org/wiki/Haskell/GADT
标签: haskell recursion switch-statement