# Message from JavaScript discussions

December 2017

— And u defined with the same name ... So still I haven't gotten iy

A monad is a value / object / class instance (depending on language) that satisfies a few conditions:

Has a bind method (a callback that gets called with the encapsulated value)

A unit function exists, to encapsulate a value within a monad

Promises are JavaScript examples of monads, a value can be encapsulated (unit) with `Promise.resolve(value)`

, and promise objects have a bind method (`.then()`

)

— So any function that returns a Promise (or any other monad implemntation) is a monadic function

— Also, the bind method should return a new monad, with the transformed value

— I guess a function that gets passed into a monad could be considered monadic, but really that could be any function

— For instance:`MyMonad(4).bind(addOne)`

would return MyMonad(5) (aka a monad that encapsulates the value 5)

— Ok .

. that was awesome and brief ... Thanks TRGWII

— No problem :)

— And the REASON for wrapping values like this is to encapsulate a chain of functions, and to prevent impure values to enter a pure functional environment

— There is no way to get the encapsulated value out of a monad in a pure functional environment

— What are its benefits ... Why do I need monads

— It's the only way to do IO and impure operations if you write pure functional code