functional decorator idiom with functional composition

by dimitrs_papadimitriou

HTML

<script src="https://cdn.jsdelivr.net/gh/eu81273/jsfiddle-console/console.js"></script>

JavaScript

var createProduct = (value) => ({ price: () => value, })
    var addPackaging = (product) => ({ price: () => product.price() + 0.5, })
    var addRibons = (product) => ({ price: () => product.price() + 0.3, })
    
    const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))) 
 
    var finalProduct =addRibons(addPackaging(createProduct(20)))//function composition 
    var fincalProduct = compose(addRibons,addPackaging,createProduct)(20);
    console.log(finalProduct.price())