[swift-evolution] Proposal: Add generator functions to the language

T.J. Usiyan griotspeak at gmail.com
Sat Dec 12 05:20:51 CST 2015


This feature (set) as sketched here by Joe is worthwhile, in my opinion.
The use of catch fits in and effect neatly captures this class of behaviors.
+1 for `effect`
---
TJ

On Sat, Dec 12, 2015 at 4:17 AM, Joe Groff via swift-evolution <
swift-evolution at swift.org> wrote:

>
> On Dec 11, 2015, at 6:26 PM, Jordan Rose via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> Eh, I was trying to avoid grabbing another keyword, but I guess it's
> context-sensitive anyway.
>
>
> I've thought about this some. It might not have to be a keyword, if this
> were a generalized language feature. Anything that interrupts control flow
> and optionally resumes it later, such as 'throws', 'yields', and
> potentially also 'async', could be implemented as instances of algebraic
> effects. As a rough sketch of an idea, you could declare an effect and its
> operations:
>
> effect throws { @noreturn operation throw (ErrorType) -> () }
> effect yields<T> { operation yield (T) -> () }
> effect awaits { operation await<T> (Promise<T>) -> T }
>
> and 'catch' could be generalized to let you handle any effect operations
> that might be performed in the body of a block:
>
> class Generator<T> {
> var generator: () yields<T> -> ()
> func next() -> T? {
> do {
>    generator()
> return nil
> } catch yield (let x) {
> generator = currentContinuation
> return x
> }
> }
> }
>
> See Eff (http://www.eff-lang.org) for an example of a language with this
> already implemented.
>
> -Joe
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151212/bc9afe69/attachment.html>


More information about the swift-evolution mailing list