与UUAGC进行单点遍历

时间:2017-08-03 12:30:06

标签: haskell tree-traversal uuagc

我想用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))

0 个答案:

没有答案