Companion code for paper "Imperative Functional Programs that Explain their Work", Wilmer Ricciotti, Jan Stolarek, Roly Perera and James Cheney, ICFP 2017, Oxford, UK
Writer to accumulate nodes and edges. It is worth thinking whether it makes sense to use writer. On the one hand we will be using State already, which allows to accumulate nodes and edges, on the other hand we want don't really care about things in the state, just those in the writer. I think this could be dealt with using a wrapper to run the monad.
State to store current graph colour. This would eliminate the need to pass around the node arguments
[x] It would be good to have a consistent way of dealing with graphing Trace, Exp and Syntax. Type classes might help.
[x] I claim:
trace2gvG node edge t = traces2gvG (node, node, node) edge t t
State
for theInt
counterWriter
to accumulate nodes and edges. It is worth thinking whether it makes sense to use writer. On the one hand we will be usingState
already, which allows to accumulate nodes and edges, on the other hand we want don't really care about things in the state, just those in the writer. I think this could be dealt with using a wrapper to run the monad.State
to store current graph colour. This would eliminate the need to pass around the node argumentsTrace
,Exp
andSyntax
. Type classes might help.In other words, a lot of logic is duplicated.