Prism es un compilador funcional de prueba de concepto desarrollado por Stephen Diehl durante los últimos tres años. Su propuesta central consiste en modelar los efectos computacionales —mutación, excepciones, generadores, entrada/salida— dentro del sistema de tipos, de modo que el programador declare explícitamente qué operaciones puede realizar una función mediante una fila de efectos, por ejemplo !{Gen} o !{Abort, Timeout}.
El mecanismo sobre el que se construye Prism es el de manejadores de efectos algebraicos: un efecto declara operaciones y un manejador les da significado al recibir la continuación como un valor ordinario. Esta misma idea unifica, según el autor, cinco áreas clásicas del diseño de lenguajes: excepciones con tipado estructural y extensible, generadores y pipelines de streams sin listas intermedias, búsqueda ambigua con continuación reificada, cancelación determinista y lentes integradas en el lenguaje para actualizar registros anidados de forma puramente funcional que, cuando la propiedad es única, compila a escritura directa en memoria.
Prism hereda conceptos de OCaml 5, Haskell y Koka, pero prescinde tanto de las mónadas como del sistema de clases de Java para las excepciones. Los efectos son polimórficos por fila y se componen estructuralmente entre llamadas, sin torres de mónadas ni transformadores que elevar manualmente. El artículo incluye ejemplos de código que muestran cómo una función de Fibonacci con variables mutables conserva el tipo Int -> Int cuando sus efectos no son observables desde fuera, cómo encontrar ternas pitagóricas con continuación reanudada varias veces, y cómo derivar lentes automáticamente sobre registros anidados. Diehl presenta Prism como un ejercicio de diseño que demuestra que tratar los efectos como interfaces tipadas puede simplificar de manera significativa la programación funcional con efectos.
