Is there a way to change the closure of a python function?

Paul Moore p.f.moore at gmail.com
Wed Sep 28 11:41:45 EDT 2016


On Wednesday, 28 September 2016 10:19:01 UTC+1, Chris Angelico  wrote:
> If monads allow mutations or side effects, they are by definition not
> pure functions, and violate your bullet point. Languages like Haskell
> have them not because they are an intrinsic part of functional
> programming languages, but because they are an intrinsic part of
> practical/useful programming languages.

Monads don't "allow" mutations or side effects. However, they allow you to express the *process* of making mutations or side effects in an abstract manner.

What "allows side effects" in languages like Haskell is the fact that the runtime behaviour of the language is not defined as "calculating the value of the main function" but rather as "making the process that the main functon defines as an abstract monad actually happen".

That's a completely informal and personal interpretation of what's going on, and Haskell users might not agree with it[1]. But for me the key point in working out what Haskell was doing was when I realised that their execution model wasn't the naive "evaluate the main function" model that I'd understood from when I first learned about functional programming.

Paul

[1] One of the problems with modern functional programming is that they typically have major problems explaining their interpretation of what's going on, with the result that they generally lose their audience long before they manage to explain the actually useful things that come from their way of thinking.



More information about the Python-list mailing list