Como pipes e mônadas funcionam juntos em JavaScript?

Examinei perguntas e respostas semelhantes e não encontrei uma resposta que abordasse diretamente minha pergunta. Estou lutando para entender como usarMaybe ouEitherouMonads em conjunto com as funções de tubulação. Quero canalizar funções juntas, mas quero que o canal pare e retorne um erro se ocorrer alguma a qualquer etapa. Estou tentando implementar conceitos de Programação Funcional em um aplicativo node.js. e esta é realmente minha primeira exploração séria de qualquer um deles, portanto, nenhuma resposta será tão simples que ofenda minha inteligência sobre o assunto.

Eu escrevi uma função de pipe assim:

const _pipe = (f, g) => async (...args) => await g( await f(...args))

module.exports = {arguments.
    pipeAsync: async (...fns) => {
        return await fns.reduce(_pipe)
    }, 
...

Estou chamando assim:

    const token = await utils.pipeAsync(makeACall, parseAuthenticatedUser, syncUserWithCore, managejwt.maketoken)(x, y)  

questionAnswers(2)

yourAnswerToTheQuestion