less_retarded_wiki/monad.md
2021-11-19 19:41:24 +01:00

1.3 KiB

Monad

{ This is my poor understanding of a monad. ~drummyfish }

Monad is a mathematical concept which has become useful in functional programming and is one of the very basic design patterns in this paradigm. A monad basically wraps some data type into an "envelope" type and gives a way to operate with these wrapped data types which greatly simplifies things like error checking or abstracting input/output side effects.

A typical example is a maybe monad which wraps a type such as integer to handle exceptions such as division by zero. A maybe monad consists of:

  1. The maybe(T) data type where T is some other data type, e.g. maybe(int). Type maybe(T) can have these values:
  • just(X) where X is any possible value of T (for int: -1, 0, 1, 2, ...), or
  • nothing, a special value that says no value is present
  1. A special function return(X) that converts value of given type into this maybe type, e.g. return(3) will return just(3)
  2. A special combinator X >>= f which takes a monadic (maybe) values X and a function f and does the following:
  • if X is nothing, gives back nothing
  • if X is a value just(N), gives back the value f(N)

TODO: example in some lang, e.g. haskell