const Box = (x) => ({ map: f => Box(f(x)), // always return Box type. fold: (f) => f(x), // unwarp value }) const result= Box(10) .map((x) => x * 2) .map((x) => x + 10) .fold(x => x); console.log(result);