[swift-evolution] [proposal] Either in the Swift Standard Library

Kevin Ballard kevin at sb.org
Mon Jan 25 23:55:27 CST 2016


There absolutely is a cost. `Result<T>` has a rather intuitive meaning.
`Either<T>` has *no intuitive meaning whatsoever*. It says absolutely
*nothing* about what it means beyond the fact that there are two
potential values. As a result, it is a largely useless type whose sole
redeeming feature is it allows developers to avoid having to define
their own enum, but in most cases that aren't covered by Result<T> you
actually *want* to define your own enum so you can attach meaning to
the value.

If it's not obvious, I'm very strongly against having a generic Either
type, but I do want a Result<T> or Result<T,E>.

-Kevin Ballard

On Fri, Jan 22, 2016, at 10:22 PM, Developer via swift-evolution wrote:
> My overwhelming concern, after having a conversation with Chris, is
> that implementing a Result<T> means we are strongly implying a
> particular semantics and use case when we could generalize and
> abstract for no cost but an extra generic parameter.  In F#,
> Core.Choice can be used to build a Validation or Result monad, but the
> converse is impossible.
>
> ~Robert Widmann
>
> 2016/01/23 1:05、Rob Mayoff via swift-evolution <swift-
> evolution at swift.org> のメッセージ:
>>> Just added a section of motivating examples to the Either proposal.
>>> Ping me if you have any more that I missed ('cause I'm sure I did
>>> miss a lot).
>>>
>>> https://github.com/typelift/swift-evolution/blob/either-or/proposals/0024-either.md#motivating-examples
>>>
>>
>> Your motivating examples (including all the projects you linked
>> except "Any many more") overwhelmingly use the Either (or similar
>> type) to represent success/failure. I'm not sure there's a single
>> example where the names Left and Right actually make sense in the
>> problem domain. I'm not 100% sure about func alternate in
>> Madness/Alternation.swift. It definitely uses Left/Right to mean
>> Failure/Result, but I couldn't tell if it also uses them as something
>> else. Which makes those names all the more maddening.
>>
>> I checked my company's largest Scala project, which is over 300,000
>> lines. We use Scala's Try/Success/Failure in dozens of places. We use
>> Either/Left/Right once, in a thrown-together report-generating
>> script, which would probably have been written in awk or perl if it
>> didn't need to read binary log files. (The ability of IntelliJ to
>> reliably find all uses of a class or method is not to be
>> underestimated. Hint hint, team Xcode.)
>>
>> I think a Result/Success/Failure type is warranted, but I'm very
>> skeptical about generic Either/Left/Right.
>>
>> _______________________________________________
>> swift-evolution mailing list swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> _________________________________________________
> 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/20160125/f1cd01ae/attachment.html>


More information about the swift-evolution mailing list