Haskell: Usa `do` para registros más claros

Fuentes: Prefer do notation over Applicative operators when assembling records

Este artículo del blog de HaskellForAll aborda una recomendación de estilo para la construcción de registros (tipos de datos) en Haskell: priorizar la notación do sobre los operadores Applicative (como <$> y <*>). Aunque ambos métodos son válidos, la notación do ofrece ventajas significativas en términos de legibilidad, mantenibilidad y claridad de los mensajes de error.

¿Por qué usar do? La notación do facilita la construcción de registros al permitir una estructura más lineal y legible, especialmente cuando se introduce lógica adicional, como prompts al usuario. Considera la creación de un registro Person a partir de dos líneas de entrada. Usar operadores Applicative puede resultar en una expresión larga y difícil de entender, que a menudo requiere dividirla en múltiples líneas. La notación do, en cambio, permite una presentación más clara y secuencial de las operaciones.

Ventajas clave de do:

  • Ergonomía: La notación do es más intuitiva y menos restrictiva, permitiendo una mejor organización del código.
  • Insensibilidad al orden: Si el orden de los campos en la definición del registro Person cambia, el código que usa do seguirá funcionando correctamente. Esto no es cierto para la versión con operadores Applicative, que podría fallar silenciosamente.
  • Mejores mensajes de error: Al agregar nuevos campos al registro, la versión do genera mensajes de error más claros y directos, indicando explícitamente qué campos no se han inicializado. Esto simplifica la depuración y el mantenimiento.

Limitaciones y Consideraciones:

  • La recomendación se aplica principalmente a tipos de datos definidos con sintaxis de registro. No es aplicable a tipos con argumentos posicionales o funciones arbitrarias.
  • Para usar do con ciertos tipos de constructores (como el parser de optparse-applicative), es necesario habilitar la extensión de lenguaje ApplicativeDo.

En resumen, aunque los operadores Applicative son una herramienta poderosa, la notación do proporciona una alternativa más legible, mantenible y robusta para la construcción de registros en Haskell, especialmente en escenarios donde la lógica es más compleja o el orden de los campos puede cambiar.