¿Qué es?
Si aplicamos la siguiente forma de modelar estados:
Gestiona estados creando un type que represente cada uno de estos
Podemos dibujar los caminos de como se produce la transición de uno a otro por la ejecución o triggero de comandos.
La definición es el conjunto de estados y sus transciones. como la siguiente

¿Por qué aplicarlo?
- Cada estado puede tener un comportamiento permitido diferente. Podríamos codificar ese requisito directamente en la firma de la función, utilizando el compilador para garantizar que se cumpliera esa regla de negocio.
- Todos los estados están explícitamente documentados.
- Es una herramienta de diseño que te obliga a pensar en todas las posibilidades que podrían darse. Una causa común de errores en un diseño es que no se tratan ciertos casos extremos. Y así sucesivamente. Pensar en un diseño en términos de estados puede sacar a la luz estas cuestiones y aclarar la lógica del dominio.
¿Cómo los creamos?
- Gestiona estados creando un type que represente cada uno de estos y que todos estén bajo un Choice type
- Crea un Command Handler (funcion) que acepte el Choice type y devuelva una versión de este (otro estado o el mismo)
De esta manera, desde el punto de vista de quien llama, el conjunto de estados se trata como una sola cosa para su manipulación general, pero al procesar los eventos internamente, cada estado se trata por separado.