El artículo técnico explora la técnica de 'defuncionalización' en Haskell para permitir que las funciones se comporten como datos puros dentro de estructuras de datos extensibles. El autor argumenta que, aunque las funciones suelen ser complejas y difíciles de serializar, es posible integrarlas en tipos de datos que implementan interfaces como Show, NFData, Eq y Ord mediante el uso de typeclasses y tipos existenciales.
El método propuesto consiste en crear un tipo existencial que envuelve los datos de comportamiento externo junto con su diccionario de typeclass correspondiente. Al ser los diccionarios de typeclasses globales y coherentes, no contienen datos ocultos ni thunks perezosos inesperados, lo que permite que el tipo cumpla con las leyes de Show y NFData sin problemas. Las interfaces Eq y Ord se implementan comparando la reflexión de tipos del runtime, mientras que Show se deriva directamente.
Esta técnica es particularmente útil para lenguajes de programación funcionales que compilan a WASM, donde se necesita mantener la pureza de la abstracción sintáctica (AST) para facilitar pruebas de propiedades y análisis estático, pero se requiere la capacidad de inyectar comportamientos específicos, como llamadas a funciones externas. Al usar typeclasses restringidas por tipos, el código de compilación permanece simple y no necesita conocer los tipos personalizados, permitiendo una extensibilidad semántica sin sacrificar la legibilidad de los datos.
