Esto es más o menos cómo entiendo las monads en este momento en el contexto de Python (puedo estar meando muy afuera del tarro); no tiene nada que ver con falta de side effects, ni (a menos que uno quiera) con teoría de categorías. La idea básica es que cuando uno hace f(x), en vez de que f tenga inicialmente el control de la ejecución, lo tenga x. Receta pava para agregar algo así como monads a un programa en Python: 1. Usar en las funciones que toman monads el decorador def monad_aware(f): def fprime(x): return x.apply(f) return fprime 2. Que todas las clases que sean monads tengan un método "apply(self, f)" Un caso canónico de monads que es útil incluso en lenguajes "impuros" con efectos secundarios es implementar el concepto de valor no definido (que no necesariamente quiere decir None, o al menos no en estos días, cuando None se usa para muchas cosas distintas). Sacando algunos métodos auxiliares, uno pueda implementar eso usando el decorador monad_aware, y con una clase Maybe que tenga el método def apply(self, f): if not self.is_defined: return Maybe() else: return Maybe(f(self.value)) Maybe() genera el valor no definido. Lo que esto hace, por supuesto, es que cualquier función f(x) devuelva "no definido" si x no está definido, y f(x) si está definido. El código completo (todavía pavo) está en http://pastebin.com/f7bd884d3 . Hay otras maneras de agregar esta semántica de valores no definidos, claro (e.g., con otro decorador), pero lo potencialmente copado es que uno puede hacer a las funciones monad_aware solo una vez, y darle a las monads comportamientos arbitrariamente interesantes (logeo, seguridad, "read-once values", constraints arbitrarios, variables encriptadas, o lo que sea), sin tener que modificar o redecorar funciones. Visto por el otro lado, una mónad decora automáticamente cualquier función que la tiene como parámetro. (Ejercicio para el lector: extender el decorador a funciones con parámetros arbitrarios.) Una pregunta: ¿es posible decorar funciones "por default" de una manera más o menos elegante? Por ejemplo, hacer algo de manera tal que a toda función que uno defina se le aplique automáticamente el decorador monad_aware. (No digo que sea una buena idea hacerlo, o siquiera que quiera hacerlo, pero al menos desde un punto de vista teórico, la posibilidad de hackear de manera más implícita el mecanismo de aplicación de funciones suena bastante interesante.) Marcelo --------------------------------------------------------------------- Para dar de baja la suscripcion, mande un mensaje a: pyar-unsubscribe@decode.com.ar Para obtener el resto de direcciones-comando, mande un mensaje a: pyar-help@decode.com.ar PyAr - Python Argentina - Sitio web: http://www.python.com.ar/