SML模块系统和Haskell的类型和类型类系统在能力上有何区别?

11

我试图理解这里的缺陷在哪里。 SML模块系统是否仅提供依赖类型,类似于Idris扩展了Haskell类型系统,还是除了添加依赖类型的能力之外还有更多?现有互联网文章中关于SML模块系统的信息要么难以找到,要么对我来说难以理解。

**编辑** 对于这个问题,有些困惑,这种困惑似乎源于我对ML模块系统的混淆(我认为是由于我按照Haskell方式理解Functors)。依赖类型被提供作为两种类型系统可能不同的例子,但事实证明它是一个糟糕的例子,因为两个系统都不支持这样的东西(至少不是直接的)。

这个问题的主要目标是让我确定ML和Haskell类型系统之间概念表达上的差异。哪些抽象/概念不能在其中一个表示却可以在另一个中表示?为什么有人会声称ML的类型系统比Haskell的更现代/强大,反之亦然。另一种思考这个问题的方式是,在哪一个类型系统中缺少另一个类型系统拥有的功能?

我对此感兴趣的原因是由于我对架构软件系统的兴趣以及不同类型系统如何使软件的模块化和可扩展性更容易或更难。我对命令式语言中的面向对象类型系统不感兴趣,因此我现在正在研究ML和Haskell提供的类型系统,因为它们是我感兴趣的第一个类型系统。


我对依赖类型的理解是,它们允许使用在编译时索引类型的值来编写/评估类型级别表达式。我不确定SML模块是否允许您这样做,但也许我的对于依赖类型的理解太狭隘了? - didierc
6
机器学习模块系统不提供依赖类型。我不理解问题的其余部分。也许最好的方法是你在找到的文档中确定你难以理解的内容,并针对它们提出具体问题。 - sepp2k
1
我认为你可能会对cs.stackexchange.com上的那个问题感兴趣,尤其是Andrej Bauer的答案。 - didierc
2
据我所知,SML的模块在编译时是一等公民(它们可以作为参数传递给“functors”,这是模块之间的函数——与Haskell使用该单词的方式不同)。 Haskell没有这样的机制,尽管它在功能上相当于类型类(尽管根据您要做什么,清洁度存在实质性差异)。 - luqui
1
这篇论文可能会给你一个深入的答案:http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf - limp_chimp
显示剩余3条评论
1个回答

0

POPL 2007 论文 "模块化类型类",作者是 Derek Dreyer、Robert Harper 和 Manuel M.T. Chakravarty,详细比较了 Haskell 和 ML 类型系统,并提供了示例。不幸的是,我认为简要摘要是不可能的;但整篇论文可以在网上阅读 https://www.cs.cmu.edu/~rwh/papers/mtc/short.pdf。(感谢上面 limp_chimp 的评论。)


4
嗯...你能在这里提供一个简要摘要吗?链接可能已经失效了,我认为仅发布一个链接并不符合常规的SO答案约定。 - xji
我认为简短的摘要是不可能的。 - josiah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接