Mark S. Miller (2013-12-12T19:53:58.000Z)
forbes at lindesay.co.uk (2013-12-16T14:57:30.129Z)
> My aesthetic judgement is that "!" is not a good choice because grawl is > bad for beginners. Keep in mind that infix ! is proposed http://wiki.ecmascript.org/doku.php?id=strawman:concurrency for use in ES7 to mean "do this operation eventually", e.g., ```js p2 = p1 ! foo(a, b); ``` would be equivalent to ```js p2 = Promise.cast(p1).send("foo", a, b); ``` which, for local promises, is equivalent to the ES6 ```js p2 = Promise.cast(p1).then(r => r.foo(a, b)); ``` The use of infix ! here is based on its similar use for concurrent or async message sending in many process algebra languages as well as Erlang and Scala. This proposal is far from accepted, and not relevant prior to ES7. But given that we do adopt infix ! for mean "do this asynchronously/eventually", it would unduly increase the grawlixness to adopt an unrelated symbol, such as ~>, for async arrows. > Generators, on the other hand, are a way of implementing a sequence. As > such, they don't fit into that "arrow" niche. Actually, they do. Thanks to Domenic for triggering the following thought: Where ```js x => t ``` implements the mapping type X -> T, the corresponding ```js x =*> t ``` implements the mapping type `X -> T*`, where the `*` here reads like the kleene (or regexp) `*`, i.e., this function maps from an `X` to zero or more `T`s. > given async functions and async arrows, what use cases are left for generator arrows? Concise synchronous generators.