几天前,我的一个朋友给了我一个Haskell问题
Hey,MK,假设我有个BNF,并且我在Haskell中有个这个BNF的parser。
现在,我想给这个BNF改一行,有没有办法不用动这个BNF parser的代码(因为是其他人写的),而是对这parser进行扩展呢?
这问题挺有趣的,也不算难。
这问题说是extensibility problem,其实有两个地方需要扩展。
0:Parser需要用open recursion之类的方法扩展
1:Parse出来的ADT也需要可扩展性
后半个需求见多了,Final Tagless,DTALC,Tree that grow,Recursion scheme style fix。。。于是放下不表,我们来处理前一个。
前半个。。Haskell's Overlooked Object System就搞过,当然他们有点heavy weight,打算随手弄一个超级轻量级的:5行就够了,多一行是小莎莎。
Ready?