最近两周被两个bug折磨的快要去死了……

第一个老师帮我指对了方向,虽然当时我觉得我的改动应该没有什么影响,但真的fix了。这个说明我对Haskell的理解还是不够透彻,语言内部的一些东西都还是不很了解。

第二个今天终于解决了,我检查了不下10遍可能出现问题的地方,在纸上、Exel里面DryRun了很多遍example3&complex3,大把大把的时间花在这上面,甚至尝试改变Monad结构以支持printing。最后在无聊去优化其他部分代码的时候才发现原来是在产成新标签的时候多做了生成新图的动作,应该是在代换到新版本代码的时候功能转移走了但没有删除,所以在某些时候会因为重复动作而挂掉。

不过期间有机会看了看haskell的调试部分,而且也是因为追踪到了产生VarName时的可疑行为进而考虑优化代码然后才发现根源的。Debugger以前从来没有用过,相关信息:
http://www.haskell.org/ghc/docs/latest/html/users_guide/ghci-debugger.html
http://www.haskell.org/haskellwiki/Debugging

很好用的东东:
:set -fbreak-on-exception
:trace functionName
:hist
不过局限是只能显示20条历史记录,不知道怎么扩展。