> 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