Haskell 支持相互递归的 let 绑定(bind),这很棒。 Haskell 不支持相互递归的模块,这有时很糟糕。我知道GHC有its .hs-boot
mechanism ,但我认为这有点骇人听闻。
据我所知,对相互递归模块的透明支持应该相对“简单”,并且可以完全像相互递归的 let-bindings 一样完成:我不会将每个单独的模块作为编译单元,而是将每个强连接组件将模块依赖图作为编译单元。
我在这里错过了什么吗? Haskell 不以这种方式支持相互递归模块是否有任何重要的原因?
最佳答案
这个6-year-old feature request ticket包含大量讨论,您可能已经看过。它的要点是,就 GHC 而言,它并不完全是一个简单的改变。提出了几个具体问题:
.hi
的尴尬和 .o
文件。 hs-boot
的现有构建文件。 很多人希望看到这一点得到支持,但到目前为止,还没有人提出一个可能的实现,或者制定出一个详细的、指定良好的设计来处理上面提到的所有棘手的极端情况。
关于haskell - 为什么 Haskell 不支持相互递归的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150011/