recursive - map haskell
¿Por qué no debo mezclar pestañas y espacios? (1)
El problema es doble. En primer lugar, Haskell es sensible a la sangría, por ejemplo, el siguiente código no es válido:
example = (a, b)
where
a = "Hello"
b = "World"
Ambos enlaces deben sangrarse con el mismo número de espacios / pestañas (ver
la regla de fuera de juego
).
Si bien es obvio en este caso, está bastante oculto en el siguiente, donde denoto un espacio con
·
y una pestaña con
»
:
example = (a, b)
··where
····a = "Hello"
» b = "World"
Esto se verá como un código válido de Haskell si el editor mostrará pestañas alineadas a múltiplos por cuatro. Pero no lo es. Las pestañas de Haskell están alineadas por múltiplos de ocho, por lo que el código se interpretará así:
example = (a, b)
··where
····a = "Hello"
» b = "World"
En segundo lugar, si usa solo pestañas, puede terminar con un diseño que no se ve bien. Por ejemplo, el siguiente código parece correcto si se muestra una pestaña con seis o más espacios (ocho en este caso):
example = (a, b)
» where» a = "Hello"
» » b = "World"
Pero en otro editor que usa 4 espacios ya no se verá bien:
example = (a, b)
» where» a = "Hello"
» » b = "World"
Sin embargo, sigue siendo correcto. Sin embargo, alguien que esté acostumbrado a los espacios podría reindentarse con enlaces y terminar con un error de analizador.
Si aplica una convención de código en todo el código que se asegura de que solo use pestañas al comienzo de una línea y use una nueva línea después de
where
,
let
o
do
, puede evitar algunos de los problemas (consulte
11
).
Sin embargo, las versiones actuales de
GHC advierten sobre las pestañas de forma predeterminada
, ya que
have
been
a
source
of
many
errores de análisis en el pasado, por lo que probablemente también desee deshacerse de ellos.
Ver también
- Un hilo de reddit sobre el tema (espacios profesionales mayoritarios, pero algunas pestañas profesionales)
- Buen estilo Haskell (espacios profesionales)
- 11 (mezcla profesional)
A menudo leo que no debería mezclar pestañas y espacios en Haskell, o que no debería usar pestañas en absoluto. ¿Por qué?