<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>I've stated in the past that I'd like to see Optional conform to SequenceType. It may as well conform to CollectionType too. The only real drawback I'm aware of is the addition of extra methods/properties on Optional, which shouldn't actually be a problem, it just seems a little noisy.<br></div>
<div>&nbsp;</div>
<div>Incidentally, pre-1.0 Rust used to actually have a fair amount of code that used a for-loop to iterate an Option. The Option type still is iterable, but the introduction of `if let` into Rust served to replace the existing uses of the for loop.<br></div>
<div>&nbsp;</div>
<div>In any case, I'm broadly in favor of supporting lazy.flatMap. I'm concerned about the specific implementation in the proposal because&nbsp;LazyMapSequence&lt;LazyFilterSequence&lt;LazyMapSequence&lt;Elements, T?&gt;&gt;, T&gt; is kind of a ridiculous type to be getting back from a single call to flatMap(). I'm most in favor of making Optional conform to CollectionType and using that to simply flatMap; barring that, the CollectionOfZeroOrOne idea looks promising.<br></div>
<div>&nbsp;</div>
<div>-Kevin Ballard</div>
<div>&nbsp;</div>
<div>On Wed, Dec 16, 2015, at 12:03 AM, Dave Abrahams via swift-evolution wrote:<br></div>
<blockquote type="cite"><div>&nbsp;</div>
<div><blockquote type="cite"><div>On Dec 15, 2015, at 7:21 PM, Rob Mayoff via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div>
</blockquote><blockquote type="cite">Dmitri wrote:<br></blockquote><blockquote type="cite"><div><div dir="ltr"><div><div><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex;"><div dir="ltr"><div><div><div>&nbsp;</div>
<div><span>What's the advantage?&nbsp; Why would we want to have a type that is isomorphic to Optional, except that conforms to CollectionType?</span><br></div>
<div>&nbsp;</div>
</div>
</div>
</div>
</blockquote><div>&nbsp;</div>
<div>My question (apologies if it has been answered already) is: Why isn't Optional a CollectionType, like it is in Scala?<br></div>
</div>
</div>
</div>
</div>
</blockquote></div>
<div>I don't remember the rationale, but it&nbsp;<a href="https://github.com/apple/swift/commit/fad874708e05cff56aec5587a4b0f49cdadc6d11">used to be that way</a>&nbsp;and during the run-up to the Swift 1 release IIRC several members of the Swift team objected to it. &nbsp;That's the answer to Dmitri's question: I have considered that to be off the table, but we could revisit it. &nbsp;<br></div>
<div>&nbsp;</div>
<div>One cute effect, which might be too cute for some, is that<br></div>
<div>&nbsp;</div>
<div>&nbsp; if let x = y { &nbsp;... }&nbsp;<br></div>
<div>&nbsp;</div>
<div>becomes equivalent to<br></div>
<div>&nbsp;</div>
<div>&nbsp; for x in y { ... }<br></div>
<div>&nbsp;</div>
<div>when y is an optional.<br></div>
<div><div>&nbsp;</div>
<div><div>-Dave<br></div>
<div>&nbsp;</div>
</div>
</div>
<div><img style="height:1px !important;width:1px !important;border-top-width:0px !important;border-right-width:0px !important;border-bottom-width:0px !important;border-left-width:0px !important;margin-top:0px !important;margin-bottom:0px !important;margin-right:0px !important;margin-left:0px !important;padding-top:0px !important;padding-bottom:0px !important;padding-right:0px !important;padding-left:0px !important;" border="0" height="1" width="1" alt="" src="https://www.fastmailusercontent.com/proxy/05a09c798ba1f6a65f2313b0871828d696ce3f951a36b5c43fbfd42ddd20ac93/8647470737a3f2f25723030323431303e23647e23756e64676279646e2e65647f27766f2f60756e6f35707e6d3148765176786c673171614a7d2236454230345272776e435f453245565a7d2232475e485147513451736175316252603a717642587977745152337a423545547d4a464c6d4b66366d22364d48447850534e493c68373c684a67757673687035755a415a597234666741356256307a45675e6232325d22324d636e6a5968466c4c4a487c666854483163534f6d6e6456353934317a69643641795a566a735b6c6d2232444d416b6a713444516e643e6336363f465c4833455279767142327c633e427052417452547d415369596242316d2232456876577f425365396865646852776d23344d23344/open"><br></div>
<div><u>_______________________________________________</u><br></div>
<div>swift-evolution mailing list<br></div>
<div><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br></div>
<div><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div>
</blockquote><div>&nbsp;</div>
</body>
</html>