> The proposal has been updated as per feedback from the core team 
> (https://github.com/apple/swift-evolution/pull/275). This includes removing 
> some last vestiges of Swift 2 naming as well as replacing `iterate(_:apply:)` 
> with an overloaded function `unfold(_:applying:)`.

The proposal says this:

        public func unfold<T, State>(_ initialState: State, applying: State -> 
(T, State)?) -> UnfoldSequence<T>
        public func unfold<T>(_ initialElement: T, apply: T -> T) -> 
UnfoldSequence<T>

However, the comment implies that the second one should instead be this:

        public func unfold<T>(_ initialElement: T, applying: T -> T?) -> 
UnfoldSequence<T>

I'm not sure I like having these be overloaded on only the return type of the 
closure. Maybe we could do something like this?

        public func unfold<T, State>(fromState initialState: State, applying: 
State -> (T, State)?) -> UnfoldSequence<T>
        public func unfold<T>(fromFirst initialElement: T, apply: T -> T) -> 
UnfoldSequence<T>

That way you're calling either `unfold(fromState:applying:)` or 
`unfold(fromFirst:applying:)`. (Some further bikeshedding might be needed 
here—it's late and I'm tired.)

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to