En una respuesta a esta pregunta (escrita por Pete) hay algunas consideraciones sobre la POO versus la PF. En particular, se sugiere que los lenguajes FP no son muy adecuados para modelar objetos (persistentes) que tienen una identidad y un estado mutable.
Me preguntaba si esto es cierto o, en otras palabras, cómo se modelarían los objetos en un lenguaje de programación funcional. Desde mi conocimiento básico de Haskell, pensé que uno podría usar mónadas de alguna manera, pero realmente no sé lo suficiente sobre este tema para llegar a una respuesta clara.
Entonces, ¿cómo se modelan normalmente las entidades con una identidad y un estado persistente mutable en un lenguaje funcional?
Aquí hay algunos detalles adicionales para aclarar lo que tengo en mente. Tome una aplicación Java típica en la que pueda (1) leer un registro de una tabla de base de datos en un objeto Java, (2) modificar el objeto de diferentes maneras, (3) guardar el objeto modificado en la base de datos.
¿Cómo se implementaría esto, por ejemplo, en Haskell? Inicialmente leería el registro en un valor de registro (definido por una definición de datos), realizaría diferentes transformaciones aplicando funciones a este valor inicial (cada valor intermedio es una copia nueva y modificada del registro original) y luego escribiría el valor de registro final a la base de datos.
¿Es esto todo lo que hay que hacer? ¿Cómo puedo asegurarme de que en cada momento solo una copia del registro sea válida / accesible? Uno no quiere tener diferentes valores inmutables que representen diferentes instantáneas del mismo objeto para ser accesibles al mismo tiempo.