2011-04-17 17 views
56

Es bien sabido que las clases de tipo Haskell y los módulos ML-style ofrecen diferentes mecanismos para especificar las interfaces . Son (posiblemente) equivalentes en poder, pero en la práctica cada uno tiene sus propios beneficios y desventajas.¿Cuáles son las principales dificultades teóricas para agregar módulos de ML a Haskell?

Como soy un poco inclusista en lo que respecta a las características del lenguaje, mi pregunta es esta: ¿Cuáles son las principales dificultades teóricas con la adición de módulos ML-style a Haskell? Estoy interesado en las respuestas a lo largo de las siguientes líneas:

  • Qué tipo de características del sistema existentes interactúan poco con módulos de estilo ML? (Un ejemplo de interacción deficiente es GADT y dependencias funcionales, ¡aunque las fundeps son técnicamente equivalentes a los tipos asociados!)

  • ¿Qué cosas se deben abandonar en el compilador para compilar módulos ML-style?

  • ¿Cómo interactúan los módulos de estilo ML con la inferencia de tipos?

Lectura relacionada:

+2

Gracias por preguntar esto.Me encantan los funtores de ML, es lo único que echo de menos en Haskell. – luqui

+0

¿Por qué querrías dependencias funcionales en un sistema de módulos? Por lo que puedo decir que todas las dependencias funcionales hacen es inferencia de control/instanciación implícita, que los módulos realmente no intentan hacer. –

Respuesta

33

El principal lugar de hacer la comparación es,

  • ML Modules and Haskell Type Classes: A Constructive Comparison . Stefan Wehr y Manuel M.T. Chakravarty. En Actas del Sexto Simposio ASIAN sobre Lenguajes y Sistemas de Programación - APLAS 2008, Springer-Verlag, LNCS, 2008.

  • Modular Type Classes. Derek Dreyer, Robert Harper y Manuel M. T. Chakravarty. En Actas de la 34ª Annual ACM SIGPLAN - Simposio SIGACT sobre los principios de lenguajes de programación, ACM Press, 2007.

  • First class modules for Haskell, Mark Shields y Simon Peyton Jones. Presentado a la Novena Conferencia Internacional sobre Fundamentos de Lenguajes Orientados a Objetos (FOOL 9), Portland, Oregon. 20 páginas. Octubre 2001.

realidad no estoy al tanto de cualquier problema teórico - al menos, se han hecho propuestas concretas (e implementado en prototipos) - los Escudos y papel PJ tienen mucho de los detalles. La carga de implementación, sin embargo, no es trivial.

+2

En 2014, es probable que valga la pena actualizar con una referencia a [Backpack] (http://plv.mpi-sws.org/backpack/) que está tratando de llevar algo como un sistema de módulo estilo ML a GHC. – Lambdageek

+0

[No HKT] (http://archive.is/itQtX#selection-48019.0-48021.4) en el núcleo ML (∉MixML) para los primeros 2 documentos citados que implementan clases de tipos como módulos. [_§7 Conclusion_] (https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/first_class_modules.pdf#page=12) del tercer artículo citado concluye que _§3 Módulos abstractos y Existenntials_ [existenciales en lugar de] (http://lambda-the-ultimate.org/node/5121#comment-84650) sumas dependientes rompe [encapsulación] (http://lambda-the-ultimate.org/node/5121 # comment-84486). [Discusión] (http://lambda-the-ultimate.org/node/5121#comment-84248) con ejemplos. –

+0

@Lambdageek a partir de noviembre de 2017, el autor de esta pregunta Edward Z. Yang ha sido [el mantenedor activo de Mochila] (http://archive.is/https://ghc.haskell.org/trac/ghc/wiki/Backpack) desde al menos agosto de 2017. Por ejemplo, consulte su [publicación de blog] (http://blog.ezyang.com/2014/09/open-type-families-are-not-modular/) sobre la antimodalidad de clases de tipos cuando se las interpreta como álgebra. Y su [publicación de blog] (http://blog.ezyang.com/2014/08/whats-a-module-system-good-for-anyway/#comment-7357) sobre por qué necesitamos módulos. La mochila se basa parcialmente en MixML, que afaik permite/tiene HKT en el lenguaje central. –

11

No creo que haya ningún problema teórico importante. Tendría que tomar una decisión sobre los funtores aplicativos o no. Aplicativo es probablemente más en el estilo Haskell. Pero creo que cualquier intento de agregar módulos de estilo ML a Haskell será grotesco debido a la superposición entre módulos y clases; Habrá dos formas de hacer muchas cosas.

+0

no es necesario que lo agregue, puede reemplazar –

7

Simon PJ ha argumentado que los módulos de estilo ML tienen una baja relación potencia/costo, que son difíciles de implementar. Ver SPJ's slides from POPL 2003 (hacia el final). También pide un diseño que tenga una mejor relación costo/potencia pero no conozco ninguna propuesta de este tipo.

+0

La pregunta es por dificultades teóricas, pero los problemas que cita son solo las creencias de una persona. Puede considerar la sobrecarga delimitada de OCaml como un uso de módulos de mayor relación potencia/costo. –

+0

Las diapositivas son solo opinión de SPJ, pero es común, también porque la metateoría de los módulos ML es muy complicada. Y Derek Dreyer le da suficiente crédito para reaccionar presentando una metateoría diferente: los grandes "Módulos F-ing" (http://www.mpi-sws.org/~dreyer/papers/f-ing/journal. pdf). Después de leerlo, no pude reproducir su traducción formal, pero pude traducir la mayoría de (¿todos?) El uso de módulos SML a Fomega simple. – Blaisorblade

Cuestiones relacionadas