haskell emacs haskell-mode

¿Cuáles son las similitudes y diferencias entre los modos de sangría de Haskell para Emacs?



haskell-mode (3)

Creo que los 3 modos que mencionas corresponden a los 3 modos haskell descritos en este artículo , a saber;

  • haskell-indentation == Tab Cycling
  • haskell-indent == Región rectangular
  • haskell-simple-indent == Código de alineación

Sin embargo, como no estoy 100% seguro, investigaré más cuando llegue a casa.

Al analizar detenidamente la documentación , me enteré de que Emacs haskell-mode envía con tres métodos diferentes y mutuamente excluyentes de sangría automática. Se llaman haskell-indentation , haskell-indent y haskell-simple-indent . ¿Alguien puede explicar cómo estos métodos son similares y cómo son diferentes? Me interesan no solo las características individuales sino también si una es un estándar de facto o si una o dos ya no se mantienen.


Realmente, que yo sepa, al preguntarle a las personas, no existe un estándar de facto, las personas tienen opiniones fuertes sobre cuáles prefieren pero con poca evidencia específica que no sea "me funciona en la mayoría de los casos".

El paquete haskell-indent y los paquetes haskell-indent son los más populares:

  • ambos tienen un ciclo de pestañas
  • ambos son bases de código complicadas
  • ambos tienen un montón de casos extremos donde se descomponen

Cada uno hará lo correcto en diferentes casos, pero una vez más, no hay pruebas unitarias, ningún analizador real, etc. solo un montón de casos especiales en los que los autores pasaron a pensar, por lo que la documentación y la comprensión sobre cómo comportarse en un sentido riguroso es escaso. haskell-indentation comprende más Haskell que haskell-indent , pero mucha gente te dirá, incluyéndome a mí, que pasas mucho tiempo yendo en bicicleta por las hendiduras para llegar a la correcta.

El paquete haskell-simple-indent no tiene conocimiento de Haskell, solo conoce la alineación de columnas y no tiene un ciclo de pestañas, tiene sangría y eliminación de indentaciones. Esta es la versión que uso debido a los casos de borde antes mencionados en los modos anteriores, que a veces pueden ser un poco molestos.

Creo que con tales bibliotecas será difícil describir sus diferencias de otra manera que anecdóticamente en este punto. Agradecería una comparación rigurosa (aunque es posible que el tiempo pase mejor escribiendo un modo mejor).

simple-indent es mantenido por mí. No sé si los autores de los demás están activamente interesados ​​en el mantenimiento.


haskell-indentation y haskell-indent son engañosamente similares, ambos ofrecen ciclismo a través de propuestas a través de la tipificación repetida de TAB, que es su función principal IMO.

Sin embargo, haskell-indent es definitivamente mi favorito, principalmente porque propondrá ciertas terminaciones que son bastante útiles:

  • repitiendo el nombre de una función después de que haya escrito la firma de tipo
  • repetir un nombre de función para coincidencia de patrón
  • tubos para ramas de cajas

Hace poco cambié de entorno y tuve que volver a configurar emacs, y usé haskell-indentation por error, y ¡qué extraño! OTOH, es posible que algunas de estas terminaciones sean molestas; Además, no funcionan en ciertos casos: si su función comienza con un guión bajo o (peor) si está rastreando pájaros.