<div>
                    <span style="font-size: 14px;">I think more general problem with arrow functions is that they can not capture object on which method call happened:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">object.foo(bar)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">If `object.foo` is an arrow function it has no way of knowing weather it was invoked as a function or a method. Neither it get's reference to an `object`. This makes </span><span style="font-size: 14px; ">composition between</span><span style="font-size: 14px; "> functional & OO styles components hard. </span></div><div><span style="font-size: 14px; "><br></span></div><div><span style="font-size: 14px;">Passing owner `object` of the arrow method as first argument solves this problem, by making</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">object.foo(bar)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">just a sugar for</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">var foo = object.foo;</span></div><div><span style="font-size: 14px;">foo(object, bar);</span></div>
                <div><div><br></div><br clear="all">Regards<br><span style="color:rgb(153, 153, 153)">--</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Irakli Gozalishvili</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Web: <a style="color:rgb(153, 153, 153)" href="http://www.jeditoolkit.com/" target="_blank">http://www.jeditoolkit.com/</a></span><font color="#999999"><br></font><div><br></div></div>
                 
                <p style="color: #A0A0A8;">On Wednesday, 2012-07-11 at 10:23 , Irakli Gozalishvili wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div>
                <div><span style="font-size: 14px;">It is true that on could wrap arrow function into vintage one in order to reuse it as a method, but that is a poor mans workaround. As of motivation, all I really want is to have a synergy of different paradigms that are in the language.</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">What I really mean by that is, if one writes in a functional style:</span>
                </div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">var map = (list, f) =></span></div><div><span style="font-size: 14px;">  reduce(list, (result, value) => </span></div><div><span style="font-size: 14px;">     result.concat([ f(value) ]), [])</span></div>
                <div><div><br></div><div><span style="font-size: 14px;">That should be reusable in OO code without any changes or wrappers:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">List.prototype.map = map</span></div><div><span style="font-size: 14px;">List().map((x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Also this complements another idea that I have posted a while ago:</span></div><div><span style="font-size: 14px;"><a href="https://mail.mozilla.org/pipermail/es-discuss/2012-June/023657.html">https://mail.mozilla.org/pipermail/es-discuss/2012-June/023657.html</a></span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Where I proposed to make private names functions:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">var method = Name()</span></div><div><span style="font-size: 14px;">method(object, arg) // is just a sugar for</span></div><div><span style="font-size: 14px;">object[method](arg)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">This will enable people to write code in OO or functional style and make it usable in other style:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">var map = Name();</span></div><div><span style="font-size: 14px;">List.prototype[map] = (list, f) =></span></div><div><span style="font-size: 14px;">  reduce(list, (result, value) => result.concat([ f(value) ]), [])</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Which one will be able to us in a functional style</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">map(list, f)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">or in OO</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">list[map](f)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Also even if suggested changes to private names won't take of, it's still can be implemented as a library:</span></div><div><span style="font-size: 14px;"><a href="https://github.com/Gozala/method">https://github.com/Gozala/method</a></span></div><div><span style="font-size: 14px; "><br></span></div><div><span style="font-size: 14px;">There for a way to author functions that also can be used as methods is relevant. Thin arrows would probably also solve this problem.</span></div><br clear="all">Regards<br><span style="color:rgb(153, 153, 153)">--</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Irakli Gozalishvili</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Web: <a style="color:rgb(153, 153, 153)" href="http://www.jeditoolkit.com/" target="_blank">http://www.jeditoolkit.com/</a></span><font color="#999999"><br></font><div><br></div></div>
                  
                <p style="color: #A0A0A8;">On Wednesday, 2012-07-11 at 09:39 , Claus Reinke wrote:</p><blockquote type="cite"><div>
                    <span><div><div><blockquote type="cite"><div><div>function map(f) {</div><div> return this.reduce((result, value) =>  result.concat([ f(value) ]), [])</div><div>}</div><div>..</div><div>var map = (list, f) =></div><div>  list.reduce((result, value) => result.concat([ f(value) ]), [])</div></div></blockquote><div><br></div><div>Not sure I got your motivation, but would this help?</div><div><br></div><div>    function fn(f) { return f(this) } // provide 'this' as explicit arg</div><div><br></div><div>    let map = it => f =></div><div>      it.list.reduce((result, value) => result.concat([ f(value) ]), [])</div><div><br></div><div>    let obj = { map: fn(map), list: [1,2,3] }; // wrap map as method</div><div><br></div><div>    obj.map(x => x+1);</div><div>    map( {list:[1,2,3]} )(x => x+1);</div><div><br></div><div>Claus</div><div> </div></div></div></span>
                  
                  
                  
                  
                </div></blockquote><div>
                    <br>
                </div>
            </div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>