haskell literate-programming haddock

Literate Haskell(.lhs) y eglefino



literate-programming haddock (2)

Por el momento, solo uso eglefino, pero después de ver algunos ejemplos realmente interesantes (por ejemplo, esta esencia ) de Haskell alfabetizado, estoy interesado en probarlo en un proyecto.

Las preguntas que obtuve son:

  • ¿Qué escribes cuando Haddock comenta y qué escribes en la parte alfabetizada?

  • ¿Cómo escalas la programación que sabe leer y escribir en múltiples archivos? ¿Alguien puede señalarme un ejemplo en el que se usa la programación alfabetizada en un paquete con múltiples módulos? ¿Cuál es su experiencia al usar la programación alfabetizada en paquetes más grandes?

  • ¿Qué sabor (rebaja, látex, ...) del Haskell alfabetizado se prefiere?

  • ¿Por qué estás programando en Haskell literario o Haskell simple vainilla? ¿Estás programando en ambos estilos? Si es así, ¿por qué?

  • ¿Prefieres estilo de bloque ( /begin{code} ) o Bird-style ( > )? ¿Por qué?


Si tiene la intención de compartir programas en Internet, he encontrado una combinación de haskell alfabetizado en el estilo de rebajas con mathjax para que sea una gran combinación. El programa "Pandoc" es realmente brillante para llevar este "markdown + lhs" a cualquier formato que desee, incluidos PDF o HTML. Si le dices a Pandoc que envíe a HTML, puedes usar el -mathjax (u otros indicadores similares si lo prefieres) para hacer que se rendericen tus fórmulas de matemáticas de látex.

Cuando uso este estilo, considero que el estilo de pájaro es preferible porque me resulta más fácil de leer y parece encajar mejor con el estilo de reducción.

Lo mejor de usar Pandoc con el descuento es que puedes agregar citas a tu código, fórmulas matemáticas y tener un formato realmente portátil. Puede construir algo que se asemeje a un documento de investigación científica, pero es ejecutable y también se puede publicar en blogs / wikis / sitios web.

Para dar un punto alternativo a Norman donde dice que la programación alfabetizada es útil para una disposición de código más clara, podría argumentarse que Haskell es lo suficientemente expresivo como para que los problemas que resuelves con el código sean realmente interesantes y realmente puedan beneficiarse al estar rodeado de texto explicativo . Piensa en un trabajo de investigación matemática. Los buenos artículos en matemáticas puras tienen mucho texto para explicar la motivación o las interpretaciones de alto nivel de lo que significa la notación matemática. En un trabajo sobre las ecuaciones de Navier-Stokes, por ejemplo, sería muy útil rodear la notación de las ecuaciones con texto que explique cómo se relaciona con la conservación del momento de Newton.

En resumen, he tenido mucho éxito con, y recomiendo, usando estilo markdown + lhs, signos de dólar para incrustar fórmulas matemáticas de látex, estilo de pájaro y pandoc. Recomendaría escribir programas como si fueran trabajos de investigación y tratar el haskell como lo harías con expresiones matemáticas en un trabajo de investigación.


Solía ​​escribir muchos programas alfabetizados .

¿Qué escribes cuando Haddock comenta y qué escribes en la parte alfabetizada?

La documentación de la API externa se incluye en los comentarios de Haddock. Todo lo demás entra en la parte alfabetizada. "Todo lo demás" podría incluir:

  • Invariantes internos de las estructuras de datos
  • Por qué estás haciendo las cosas de esta manera
  • Cuál es el diseño del código
  • Por qué se eligió este diseño, qué otros diseños se probaron y se encontraron sin

¿Cómo escalas la programación que sabe leer y escribir en múltiples archivos?

De la misma manera que escalas un documento LaTeX grande a varios archivos: un archivo por módulo, luego un archivo gigante que /include a todos.

¿Alguien puede señalarme un ejemplo en el que se usa la programación alfabetizada en un paquete con múltiples módulos?

No es Haskell, pero el compilador Quick C es un programa funcional grande que se escribe utilizando programación alfabetizada.

¿Cuál es su experiencia al usar la programación alfabetizada en paquetes más grandes?

La programación alfabetizada funciona muy bien para documentar módulos complicados, difíciles o complejos. Para la mayoría de los módulos simples, la documentación de la API externa (por ejemplo, Haddock) es suficiente. Y ningún programa de alfabetización realmente le dará la imagen completa de un diseño que contiene más de una docena de módulos. Para eso necesitas otras herramientas y técnicas.

¿Qué sabor (rebaja, látex, ...) del Haskell alfabetizado se prefiere?

Si está haciendo una inversión tan importante, definitivamente iría con LaTeX solo por la capacidad matemática y el poder generalmente mayor de la herramienta.

¿Por qué estás programando en Haskell literario o Haskell simple vainilla? ¿Estás programando en ambos estilos? Si es así, ¿por qué?

Mis códigos Haskell son casi siempre simples, por dos razones:

  • Trabajo con personas mayores que tienen más experiencia Haskell, y han abandonado Haskell alfabetizado. Solo los módulos más antiguos de su sistema tienen alguna posibilidad de ser .lhs.

  • Para Haskell, la programación alfabetizada es algo superfluo. Uno de los grandes beneficios de una herramienta de programación alfabetizada es que se libera de cualquier restricción que el compilador o la definición de idioma pueda poner en el orden en que aparece su código. Pero Haskell casi no tiene tales restricciones: no hay definición antes de su uso, y para una definición de función típica tengo la opción de let enlazar o en where -enlazar nombres auxiliares (o ambos). La programación alfabetizada nunca fue solo sobre comentarios elegantes, y con Haskell "letrada" eso es todo lo que obtienes. No vale la pena la molestia.

¿Prefieres estilo de bloque (/ begin {code}) o Bird-style (>)? ¿Por qué?

Yo prefiero el estilo de bloque:

  • Es más o menos compatible con cualquier otra herramienta de programación literaria en el planeta. (Las pistas de aves son exclusivas de Haskell).

  • Mi editor se adapta mejor al estilo de bloques.