If you use JavaScript, you've probably seen a monad, since Promise is a monad. Unit is Promise.resolve()
, bind is Promise.then()
. As required, Promise.resolve(x).then(y) === y(x)
(unit forms a left identity of bind), y.then(Promise.resolve) === y
(unit forms a right identity of bind), and x.then(y.then(z)) === x.then(y).then(z)
(bind is essentially associative).
You even have the equivalent of Haskell's fancy do-notation (a form of syntactic sugar to save writing unit and bind all over the place) in the form of async/await. It's just not generalized the way it is in Haskell.
I'm not sure I want my banking apps to store anything on my phone in the first place. But maybe that's just me. I don't even use banking apps.