Hoopl中(前向)重写函数的类型由mkFRewrite
函数给出:
mkFRewrite :: (FuelMonad m) =>
(forall e x.
n e x
-> f
-> m (Maybe (hoopl-3.8.6.1:Compiler.Hoopl.Dataflow.Graph n e x)))
-> FwdRewrite m n f
该m
类型意味着我可以在重写时使用单子效果。论文“Hoopl: A Modular, Reusable Library for Dataflow Analysis and Transformation”在第 4.3 节“重写函数和客户端的 monad”中说了同样的话。
谁能给我一个重写函数的例子,其中嵌入了非 Hoopl monadic效果?例如,使用 State monad 或执行一些 IO 的重写器。