wandres.dev
ONTOLOGÍA · El mapa de Elm

La ontología de Elm

El mapa mental de Elm y TEA: el lenguaje funcional puro sin errores en runtime, Model/update/view, los efectos como datos, y el legado que sembró en Redux, TCA y MVI.

⏱ 11 min

Elm es el abuelo del que casi nadie habla y al que todos deben algo. Redux tomó de él el estado único y la transición pura; The Composable Architecture copió su idea de tratar los efectos como datos; MVI en Android es el mismo ciclo con otro nombre. Y sin embargo Elm no es una arquitectura: es un lenguaje completo, con una promesa que suena a exageración hasta que la compruebas —cero errores en tiempo de ejecución— y un compilador que se comporta menos como un juez y más como un colega paciente. Este mapa te da la visión aérea antes de recorrerlo.

🎯 Al terminar esta lección sabrás
  • Ver el mapa mental completo de Elm y de TEA.
  • Entender la promesa de cero errores en runtime y qué la sostiene.
  • Situar los efectos como datos, los decoders y los ports.
  • Reconocer el linaje que conecta Elm con Redux, TCA y MVI.

El territorio, de un vistazo

mindmap
root((Elm))
  Arquitectura
    Model
    Msg y update
    view
    Cmd y Sub
  Lenguaje
    Tipos e inferencia
    Custom types
    Maybe y Result
    Funciones y pipes
    Records
  Fronteras
    Decoders JSON
    Ports
    Flags
    Custom elements
  Practica
    Routing y SPA
    Testing y fuzz
    Estilos y elm-ui
    Rendimiento
  Legado
    Redux
    TCA
    MVI

Las ideas clave

🔄

Un ciclo cerrado

Un Msg entra, update produce un Model nuevo, view lo dibuja. No hay más caminos. Toda la aplicación es esa vuelta, repetida, y por eso se puede razonar sobre ella entera.

🎁

Los efectos son datos

update nunca hace una petición: devuelve un Cmd que la describe. El runtime la ejecuta y trae el resultado como otro Msg. La función sigue siendo pura, y por tanto testeable sin mocks.

🛡️

El compilador es un aliado

Sin null, sin excepciones, sin any. Si un tipo cambia, el compilador te lleva de la mano a cada sitio que hay que tocar, con mensajes que explican en vez de acusar.

🚪

Las fronteras están vigiladas

El JSON del exterior no se cree a ciegas: se decodifica. JavaScript no se llama directamente: se le habla por un buzón (ports). Lo impuro existe, pero siempre tras una aduana.

Por qué importa

Elm demuestra que las garantías son una decisión de diseño

Casi todo lenguaje moderno promete seguridad y luego deja una puerta trasera: any en TypeScript, ! en Kotlin, unwrap en Rust, excepciones en todas partes. Elm hizo lo contrario: cerró las puertas. No hay escotilla de escape para el sistema de tipos, no hay excepciones que puedas lanzar, no hay null. La consecuencia práctica —una app de Elm en producción que no lanza errores en el navegador durante años— no es magia, es aritmética: si el único modo de fallo que queda es un bug de lógica, has eliminado categorías enteras de error. El precio también es real y este track lo dirá sin adornos: menos librerías, menos flexibilidad, y a veces la sensación de estar peleando contra el compilador cuando solo querías salir del paso. Pero aquí está lo interesante, y la razón de que Elm merezca su propio track dentro de esta categoría aunque nunca escribas Elm profesionalmente: sus ideas se escaparon del lenguaje y hoy gobiernan buena parte del frontend. Cuando escribes un reducer en Redux, cuando devuelves un Effect en TCA, cuando reduces un intent a estado en Orbit, estás usando Elm sin saberlo. Aprender el original te da algo que las copias no: entender por qué cada pieza está donde está.

El camino

  • Niveles 1–2 · La arquitectura — Model, Msg, update y view; los efectos con Cmd y Sub, y el runtime.
  • Niveles 3–8 · El lenguaje — tipos e inferencia, custom types, Maybe/Result, funciones y pipes, records, y el compilador como copiloto.
  • Niveles 9–13 · Construir — la vista, decoders JSON, ports e interop, aplicaciones grandes, y routing.
  • Niveles 14–17 · Producción — testing y fuzz, estilos y elm-ui, rendimiento y el runtime, y el despliegue.
  • Niveles 18–21 · Perspectiva — la filosofía, la comparación con el ecosistema, el legado, y la síntesis final.
⚔️ Sitúate en el mapa
  1. Estudia el ciclo del mapa mental y di en voz alta qué hace cada pieza; si puedes explicarlo, ya entiendes TEA.
  2. Piensa en el último error de runtime que viste en producción: ¿de qué categoría era? ¿null, tipo inesperado, excepción no capturada?
  3. Marca cuáles de esos errores serían imposibles en Elm. Esa lista es el argumento del lenguaje.
  4. Comprométete con la idea central: los efectos son datos, y las fronteras se vigilan.