小结和之后打算做的一些事情

在上次笔记后又过了一段时间,在 parser 方面并没有太多的进展。倒是在反复测试后发现或许 MonadError、MonadState 和 catchError 的办法能够提供我想要的组合子的语义。也为此做了一些简单的测试。

当然了,也有缺点:在有些语法分支上,是不得不使用 try 组合子的。而一旦启用了这个组合子,就又会不得不处理回溯的问题。

不过相比另一个问题,这个问题算是比较好解决的了。那就是在实现 type system 和 typing inference 的时候,会不得不涉及到状态转移和可变状态。当然,这和算法设计有关,不过我直接参考了 TAPL 上面的算法。问题就在于这个算法在许多地方都需要涉及到类似定义一个全局变量然后不断去 mutate 它的情况(比如说 name provider,再比如说 constraint set 本身)

(其实有一点并没有理解的,是 TAPL 本身并不是讲猫论或者 Monad 的书,按理来说不会涉及到太复杂的 FP 技巧?然后另一方面,使用的也是 OCaml 而不是 Java……但是实在是想不到除了 State Monad 外有什么可以解决 mutate 全局状态的办法)

所以在 Haskell 上造语言的想法就暂且搁浅了。

接下来打算稍微休整一下,先照着 TAPL 把习题做了,然后慢慢 review 之前设计的语言,把 typing system 扩展到语言上。至于 parser 的话,递归下降算法本身并没有太大的难度。

新的 base language 大概是 C#,等什么时候掌握了更高阶的 FP 技巧(比如说 State 和 MT)后再回到 Haskell 吧。

稍后也会重新开一个仓库。


小结和之后打算做的一些事情
http://inori.moe/2022/05/26/conclusions-and-laters/
作者
inori
发布于
2022年5月26日
许可协议