<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Just FWIW:</div><div class=""><br class=""><blockquote type="cite" class="">```<br class="">let foo: Foo? = curry(Foo.init) &lt;^&gt; Int(aString) &lt;*&gt; Int(bString) &lt;*&gt;<br class="">Int(cString)<br class="">```<br class=""><br class="">But I think it is unreasonable to expect all programmers to understand<br class="">and master it. So I want the postfix `???` or `|?`.<br class=""></blockquote><br class=""></div><div class="">I agree. But I would also say that deserializing from JSON is complex enough of a problem to warrant a domain-specific solution. There’s a ton of them, of course, but for example, with Freddy, it would look something like:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class="">extension Person: JSONDecodable {</div></div><div class=""><div class="">&nbsp; &nbsp; init(json j: JSON) throws {</div></div><div class=""><div class="">&nbsp; &nbsp; &nbsp; &nbsp; firstName = try j.string(“firstName”)</div></div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; lastName = try j.string(“lastName”)</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; age = try j.int(“age”)</div><div class=""><div class="">&nbsp; &nbsp; }</div></div><div class=""><div class="">}</div></div><div class=""><br class=""></div><div class="">let person = try Person(json: json)</div></blockquote><div class=""><br class=""></div>Even with the proposed `???`, a domain-specific solution would be arguably better. So I just don’t consider that a compelling use case.<div class=""><br class=""><div class="">
<div class="">— Radek</div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 09 Apr 2016, at 16:56, Yuta Koshizawa via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">I only wonder whether you really want to repeat Error() all over,<br class="">possibly with `aString` etc. as argument.<br class=""></blockquote><br class="">What I really want is the postfix version of `???` as I wrote in my<br class="">first post in this thread.<br class=""><br class=""><blockquote type="cite" class="">Besides the proposed infix `???`, I also want the postfix one which<br class="">throws a `NilError` (something like `struct NilError: ErrorType {}`).<br class="">It is useful to handle multiple `nil`s at once when we are not<br class="">interested in the kind of the error.<br class=""></blockquote><br class="">And also<br class=""><br class=""><blockquote type="cite" class="">I think `???` is too long. Instead, I propose `|?`.<br class="">For `foo: Foo?`, `try foo|?` can be read like `Foo` or `nil`. It<br class="">separates (`|`) nil (`?`) from the value and return `Foo`.<br class="">I think it makes sense.<br class=""></blockquote><br class="">Then it becomes something like the following.<br class=""><br class="">```<br class="">do {<br class=""> &nbsp;&nbsp;&nbsp;let foo: Foo = try foo(<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a: Int(aString)|?,<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b: Int(bString)|?,<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c: Int(cString)|?<br class=""> &nbsp;&nbsp;&nbsp;)<br class="">} catch _ {<br class=""> &nbsp;&nbsp;&nbsp;// Error handling<br class="">}<br class="">```<br class=""><br class="">I think the infix version is also useful when we actually want to<br class="">specify the types of errors.<br class=""><br class="">Swift provides two ways of error handling: optionals and do/try/catch.<br class="">I think it lacks a way to handle multiple optionals easily in some<br class="">cases. Someone uses applicative styles for it.<br class=""><br class="">```<br class="">let foo: Foo? = curry(Foo.init) &lt;^&gt; Int(aString) &lt;*&gt; Int(bString) &lt;*&gt;<br class="">Int(cString)<br class="">```<br class=""><br class="">But I think it is unreasonable to expect all programmers to understand<br class="">and master it. So I want the postfix `???` or `|?`.<br class=""><br class="">-- Yuta<br class=""><br class=""><br class="">2016-04-08 23:47 GMT+09:00 Thorsten Seitz &lt;<a href="mailto:tseitz42@icloud.com" class="">tseitz42@icloud.com</a>&gt;:<br class=""><blockquote type="cite" class=""><br class="">Am 08.04.2016 um 11:59 schrieb Brent Royal-Gordon &lt;<a href="mailto:brent@architechies.com" class="">brent@architechies.com</a>&gt;:<br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">I only wonder whether you really want to repeat Error() all over, possibly with `aString` etc. as argument.<br class=""></blockquote><br class="">`Error()`, no. `SpimsterKitError.invalidWicketField("a"`), yes, because even if `Int.init(_:)` threw *an* error, it wouldn't throw *your* error.<br class=""></blockquote><br class="">That's why I thought that in a real use case that logic would likely be extracted.<br class=""><br class="">-Thorsten<br class=""></blockquote>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></div></blockquote></div><br class=""></div></body></html>