添加ML风格的模块到Haskell有什么主要的理论困难?

众所周知,Haskell风格的types类和ML风格的模块为指定接口提供了不同的机制。 他们(可能)的权力是相等的,但实际上每个人都有自己的利益和弊端。

因为在语言特性方面我是一个包容性的人,所以我的问题是:在Haskell中joinML风格的模块有什么主要的理论困难? 我感兴趣的答复如下:

  • 什么样的现有types系统function与ML风格模块交互不良? (一个糟糕的交互的例子是GADT和函数依赖,尽pipefundeps在技术上等同于关联的types!)

  • 为了编译ML风格的模块,编译器最后必须放弃哪些东西?

  • ML风格模块如何与types推断进行交互?

相关阅读:

  • 罗伯特·哈珀的post引发了这个问题
  • 讨论Haskell Reddit

做比较的主要地方是,

  • ML模块和Haskelltypes:一个build设性的比较 。 Stefan Wehr和Manuel MT Chakravarty。 在第六届ASIAN编程语言和系统研讨会论文集 – 2008年APLAS,Springer-Verlag,LNCS,2008年。

  • 模块化types类 。 Derek Dreyer,Robert Harper和Manuel MT Chakravarty。 在第34届年度ACM SIGPLAN – SIGACT研讨会编程语言原则,ACM出版社,2007年。

  • Haskell ,Mark Shields和Simon Peyton Jones的一stream模块 。 提交给俄勒冈州波特兰第九届面向对象语言基础国际会议(FOOL 9)。 20页。 2001年10月。

我实际上并没有意识到任何理论问题 – 至less已经提出了具体的build议(并在原型中实现) – Shields和PJ论文有很多细节。 然而,实施的负担并不重要。

我不认为有什么大的理论问题。 你不得不作出一个关于应用仿函数的决定。 应用程序可能更多的是在Haskell风格。 但是我认为任何向Haskell添加ML风格模块的尝试都是怪诞的,因为模块和类之间的重叠; 会有两种方式做很多事情。

Simon PJ认为,ML风格的模块功耗/成本比较低,难以实现。 请参阅POPL 2003的 SPJ 幻灯片 (接近尾声)。 他还要求有一个更好的功率/成本比例的devise,但我不知道这样的build议。