¿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 shiftraise 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»?

¿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.

El principio en una línea. Un nombre forma parte de la API: debería decirle a quien programa en Dart qué hace esa cosa, con las palabras que buscaría — errores tipados —, no certificar qué abstracción es en secreto.