Bellroy comparte una técnica avanzada en Haskell para representar estados inválidos como imposibles en el sistema de tipos. La pieza central es NonEmptyText, un tipo que garantiza en compilación que una cadena tenga al menos un carácter, construido a partir de RequiredTypeArguments, introducido en GHC 9.10, que permite pasar literales de cadena a nivel de tipos como si fueran valores. Mediante la clase IsNonEmptySymbol, definida con la pragma OVERLAPPING y apoyada en UndecidableInstances, GHC resuelve hacia una instancia con mensaje de error personalizado cuando detecta la cadena vacía, en lugar de la instancia genérica. El autor explica las limitaciones: IsNonEmptySymbol es una type family, por lo que no se puede empaquetar en un Dict ni usar con funciones como hcfoldMap de Data.SOP, y su uso requiere algo de fontanería para comportarse como typeclass. En el paquete interno bellroy-data, con miles de llamadas a $$(NonEmptyText.makeTH _), sustituir las splices de TemplateHaskell por la versión con RequiredTypeArguments redujo el tiempo de compilación cerca de un 10%. La misma idea se extiende a Natural positivo y, en general, a cualquier tipo con un predicado a nivel de tipos. Para casos como el parsing de nombres de tablas de DynamoDB el autor emplea una type family que dirige la resolución de una clase interna y permite emitir errores tipados al programador. Comenta que el ecosistema avanza hacia Dependent Haskell y que paquetes como singletons-th permiten promover funciones reales, aunque con limitaciones como el límite de reducción de GHC, fijado en 20 pasos.
