Promise.prototype.then and Array.prototype.flatMap são implementações aproximadas do chain/fmap, uma função característica dos Monads.
Resumindo o máximo possível, um chain é um map que faz flatten do retorno do callback.
O chain recebe uma função que modifica o valor contido num Monad e retorna um novo valor contido num Monad com a mesma assinatura.
interface Monad<T> {