我正在尝试使用hint
package fromhackage
创建一个简单的环境,用户可以在其中发布代码行进行评估(如在 ghci 中)。我希望某些输入行是错误的(eval
会以错误结束会话)。如何创建一个健壮的会话来忽略错误输入(或者更好:它报告错误但可以接受其他输入)并保持先前一致的状态?
另外,我想以do
风格使用它,即let a = 3
作为独立输入行是有意义的。
澄清一下:我对单个eval
. 我想做的是,即使在某些步骤失败后也允许继续评估。我还想逐步扩展一个单子链(就像ghci
我猜的那样)。
换句话说:我想要这样的东西,除了我要评估3
并且不要停留在undefined
错误上。
runInterpreter $ setImports [ "Prelude" ] >> eval "undefined" >> eval "3"
更具体地说,我希望这样的事情成为可能:
runInterpreter $ setImports ... >> eval' "let a = (1, 2)" -- modifying context
>> typeOf "b" -- error but not breaking the chain
>> typeOf "a" -- (Num a, Num b) => (a, b)
我不希望它直接工作,这只是为了展示这个想法。我基本上想建立一些上下文(就像你在 ghci 中所做的那样),并且只有在没有失败的情况下,对上下文的每次添加都会修改它,每次尝试修改上下文后都可以记录或显式检索失败。