
On Thu, Feb 23, 2012 at 01:18:22PM -0800, Matt Brown wrote:
Hi all,
I'm reading the haskellwiki article on multiplate. Is it possible to modify the getVariablesPlate example to return the free variables? One idea I had is to store an environment in a reader monad, and use local to update the environment at a let expression. Couldn't figure it out, though. Any ideas?
Hi Matt, I am not very familiar with Multiplate, but from what I can see it doesn't seem like this will work. The code for traversing Let looks like Let <$> decl child d <*> expr child e The call to 'decl child d' can certainly have some sort of side-effects which can influence the processing of e -- but intuitively it seems to me there is no way to *localize* the effects only to e; it will also affect everything processed afterwards. If you really do want to compute free variables (not just test the limits of Multiplate), you may be interested in taking a look at Unbound: http://hackage.haskell.org/package/unbound -Brent