¿Cómo funcionan juntos las tuberías y las mónadas en JavaScript?

He examinado preguntas y respuestas similares y no he encontrado una respuesta que responda directamente a mi pregunta. Estoy luchando por entender cómo usarMaybe oEitheroMonads en conjunción con las funciones de tubería. Quiero canalizar las funciones juntas, pero quiero que la tubería se detenga y devuelva un error si se produce uno en cualquier paso. Estoy tratando de implementar conceptos de programación funcional en una aplicación node.js, y esta es realmente mi primera exploración seria de cualquiera de ellos, por lo que ninguna respuesta será tan simple como insultar mi inteligencia sobre el tema.

He escrito una función de tubería como esta:

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

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

Lo llamo así:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta