Monad

monad.types.monad - The Monad Class.

class monad.types.monad.Monad(value)[source]

Bases: monad.types.applicative.Applicative

The Monad Class.

Implements bind operator >> and inverted bind operator << as syntactic sugar. It is equivalent to (>>=) and (=<<) in haskell, not to be confused with (>>) and (<<) in haskell.

As python treats assignments as statements, there is no way we can overload >>= as a chainable bind, be it directly overloaded through __irshift__, or derived by python itself through __rshift__.

The default implementations of bind, fmap and join are mutual recursive, subclasses should at least either overload bind, or fmap and join, or all of them for better performance.

bind(function)[source]

The bind operation.

function is a function that maps from the underlying value to a monadic type, something like signature f :: a -> M a in haskell’s term.

The default implementation defines bind in terms of fmap and join.

fmap(function)[source]

The fmap operation.

The default implementation defines fmap in terms of bind and unit.

join()[source]

The join operation.

The default implementation defines join in terms of bind and identity function.

unit

The unit of monad.

alias of Monad

class monad.types.monad.Unit[source]

Bases: object

Descriptor that always return the owner monad, used for unit.