<div dir="ltr">That syntax is already valid, and has a different meaning. <font face="monospace, monospace">new ctorFactory`…`</font> first evaluates the tagged template (invoking <span style="font-family:monospace,monospace">ctorFactory</span> with arguments derived from the template literal) and then invokes that result as a constructor. For example, <span style="font-family:monospace,monospace">(new ctorFactory`return function Ctor(){}`).name</span> equals "Ctor". You could get clever with <font face="monospace, monospace">Reflect.construct</font> or build an interpreter for using a domain-specific language as input (<a href="https://github.com/michaelfig/jessica/blob/8832590eb988a9dfafa0d6ab112c97bacb970ac8/lib/quasi-peg.mjs#L52">example</a>), but I don't think there are many other options.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2019 at 1:39 AM Sm In <<a href="mailto:sbshw1@gmail.com">sbshw1@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail-m_-3918525053910134226gmail-gE gmail-m_-3918525053910134226gmail-iv gmail-m_-3918525053910134226gmail-gt"><table class="gmail-m_-3918525053910134226gmail-cf gmail-m_-3918525053910134226gmail-gJ" cellpadding="0"><tbody><tr class="gmail-m_-3918525053910134226gmail-acZ gmail-m_-3918525053910134226gmail-xD"><td colspan="3"><table class="gmail-m_-3918525053910134226gmail-cf gmail-m_-3918525053910134226gmail-adz" cellpadding="0"><tbody><tr><td class="gmail-m_-3918525053910134226gmail-ady"><div class="gmail-m_-3918525053910134226gmail-ajy"><img class="gmail-m_-3918525053910134226gmail-ajz" id="gmail-m_-3918525053910134226gmail-:m1" alt=""></div></td></tr></tbody></table></td></tr></tbody></table></div><div class="gmail-m_-3918525053910134226gmail-"><div id="gmail-m_-3918525053910134226gmail-:wc" class="gmail-m_-3918525053910134226gmail-ii gmail-m_-3918525053910134226gmail-gt"><div id="gmail-m_-3918525053910134226gmail-:wd" class="gmail-m_-3918525053910134226gmail-a3s gmail-m_-3918525053910134226gmail-aXjCH"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div><div><div>Template literal(includes tagged template) is so strong feature.<br></div><div>It
 makes it possible to add elegant DSL for Library(or maybe framework) 
which also can interact with js.([styled-component proofed this with 
their api](<a href="https://www.styled-components.com/" target="_blank">https://www.styled-components.com/</a>))<br></div><div>Why don't we use them to enhance ECMAScript's API?<br></div><div><br>If we allow using tagged template to constructors just like this:<br><br></div><div>```js<br></div><div>new Constructor`<br></div><div>  blahlah<br></div><div>`; // what about to call this syntax as tagged constructor?<br></div><div>```<br></div><div><br></div><div>we can do something like this:<br></div><div><br></div><div>#### If `Function` construcor is taggable<br><br></div>```js<br></div>const sum = new Function`<br></div>  (a, b) {<br></div>    return a + b;<br><div>  }<br><div>`;<br><div>```<br><br></div><div>#### If `Map` constructor is taggable<br><br></div><div>```js<br></div><div>new Map`<br>     a: 1234,<br>     one: ${() => 1},<br>     str: 'Hello!',<br>     bool: true<br> `; </div><div>```<br><br></div><div>#### If `Set` constructor is taggable. and It supports list comprehension<br><br></div><div>```js<br>new Set`<br>  ${range} <br>    -> ${x => x * 2}<br>    -> ${x => x < 10}<br> `; // Set [2, 4, 6, 8]<br>```<br></div><div><br></div><div>Feedback is welcome!<div class="gmail-m_-3918525053910134226gmail-adL"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>