Home >Backend Development >Python Tutorial >A monad is a monoid in the category of endofunctors...
What is a Monad?
A monad is a monoid in the category of endofunctors... ?
...let's try again:
A monad is an abstraction used in functional programming to handle computations in a consistent way. It is a design pattern that allows the chaining of operations while encapsulating side effects, such as state changes, I/O, or errors, in a controlled manner.
Monads can be thought of as a way to wrap values and apply functions to them, ensuring that computations are carried out in a predictable and controlled environment.
My personal understanding is: a monad is a data structure with
This enables chaining and composition of operations in a way that preserves immutability and functional purity—a "reverse" approach to a class, where state cannot be modified in-place, but transformations are applied functionally to produce new instances.
This "reverse symmetry" highlights the contrast:
Classes modify their internal state, maintaining mutability and direct interaction through internal methods. They most of the time interact with a global state
Monads reach similar outcomes to a class, but by wrapping values and mapping external immutable transformations, they have no side-effects: there is no global state
Example:
Example project in Python:
https://github.com/blackopsrepl/py-monad-task-manager
In this application, we use the State Monad to manage the state of the task list. The State Monad provides a way to model the task management process as a series of transformations on the application's state, while keeping the state itself immutable.
Instead of directly modifying the state of the task list, we use the return_ function to wrap the initial state into a monadic container, and the bind function to apply transformations to the state in a predictable way. Each time an operation is performed (such as adding, editing, or deleting tasks), it returns a new instance of the state, ensuring immutability and composability.
Key functions:
By using the State Monad, we can handle task management operations in a way that ensures the state is updated immutably and computations are composed without side effects or unwanted interactions between operations.
The above is the detailed content of A monad is a monoid in the category of endofunctors.... For more information, please follow other related articles on the PHP Chinese website!