¿Por qué se llama «errores tipados»?
La funcionalidad que hay detrás de either tiene nombres
famosos en otros ecosistemas: mónada,
railway-oriented programming. Esta página explica por qué FxDart
ha decidido deliberadamente no llamarla de ninguna de esas maneras. (¿No
te has cruzado nunca con una mónada? Empieza por
Mónadas & bloques de comprensión.)
¿Por qué no «mónada»?
Porque describiría mal la funcionalidad. Toda la gracia del diseño de
Raise es que no es estilo monádico: existe para
sustituir el encadenado con flatMap por
código en línea recta. Ya lo viste en la
página de errores tipados: el bloque
either((r) { ... }) es la alternativa a la pirámide anidada
de flatMap, no una envoltura sobre ella.
Arrow, la librería de Kotlin —el origen del diseño de esta
funcionalidad—, pasó exactamente por esta misma decisión. Arrow 1.x tenía
una typeclass Monad, emulación de tipos de orden superior y
todo el vocabulario de Haskell que va con ello. Arrow 2.x
lo eliminó todo, e incluso renombró la operación
principal shift → raise mediante una votación de
la comunidad: eligió la palabra que entendían sus usuarios por encima de
la palabra que usaba la teoría. La lección se generaliza: pon nombres
pensando en el público que quieres, y el público de FxDart son
desarrolladoras y desarrolladores de Dart normales, no teóricos de
categorías.
En el propio Dart hay además un aviso a navegantes: las librerías de FP
cuya superficie pública habla Haskell (Monad2,
HKT, notación Do) intimidan justo a quienes más
partido sacarían de los errores tipados. Una página titulada «Monad»
espantaría a sus propios lectores, y encima describiría precisamente lo
único que esta API no es.
¿Por qué «errores tipados»?
- Dice lo que hace la funcionalidad — errores que viajan en el sistema de tipos en lugar de lanzarse por encima de él —, en vez de decir cómo llama la teoría de categorías a esa forma.
- Es el nombre que usa Arrow. El capítulo correspondiente de la documentación de Arrow se titula literalmente Typed errors, así que quien programa en Kotlin y busca el equivalente en Dart aterriza en las palabras correctas.
- Sigue la norma de la casa. La filosofía de
nomenclatura de FxDart (ver
WHY_CURRIED.md: «porta el significado, no la grafía») es: nombres de Dart, no nombres de Haskell —mapy nofmap,flatMapy no el verbobind,recovery nohandleErrorWith.
¿Por qué no «raise»?
raise es el nombre «molón» y además exacto: es como se llama
de verdad el DSL, y aquí las URL de los tutoriales llevan nombre de
función (concurrent.html, fx.html). Se reservó a
propósito: si la sección 13 gana más adelante páginas de tutorial por
función (either.html, bind.html, …), un resumen
en raise.html chocaría con el futuro tutorial de la función
raise. typedErrors.html queda libre para siempre
como página de resumen de la sección.
¿Y «railway»?
Railway-oriented programming es una metáfora muy conocida para la misma idea (una vía de éxito y una vía de fallo). Es un modelo mental estupendo… y un mal nombre de página: se busca peor, no es vocabulario de Arrow y es una metáfora que ya tienes que conocer antes de que te sirva de algo.