我想用UUAGC编写树遍历,其中属性是在特定的固定monad中计算的(例如,假设我想用新的IORef ()
注释每个节点)。 UUAGC有办法做到这一点吗? (为简单起见,让我们进一步假设我的遍历可以静态安排)。
我看到uuagc
有一个--monadic
标志:
--monadic Experimental: generate monadic code
但这似乎会产生语法上无效的Haskell代码;例如,给定
imports {
import Data.IORef
}
data Tree
| X
attr Tree
syn iden :: {IORef ()}
sem Tree
| X lhs.iden = newIORef ()
{
main :: IO ()
main = do
r <- sem_Tree X
print =<< readIORef r
}
生成的代码是纯粹的monadic绑定的无意义混乱:
sem_Tree_X =
(let _lhsOiden :: (IORef ())
_lhsOiden <- ({-# LINE 12 "monad.ag" #-}
newIORef ()
{-# LINE 39 "monad.hs" #-}
)
in ( _lhsOiden))