# [swift-evolution] Proposal: Pattern Matching Partial Function (#111)

Paul Cantrell cantrell at pobox.com
Wed Feb 3 22:40:42 CST 2016

```I agree completely with this analysis. Spot on.

> On Feb 3, 2016, at 12:39 AM, David Owens II via swift-evolution <swift-evolution at swift.org> wrote:
>
> I'm really confused by this proposal. Primarily it really seems to be asking for two things:
>
>   1. Allow closures to skip the "switch item" line, and
>   2. Implicit returns within closures

…plus (3) overloading “map” to operator on single objects and not just collections.

>
> The desired troy example:
>
> let weightKg = weightTroy.reduce(0.00) {
>     case (let acc, Troy.Pound(let quantity)): acc + Double(quantity) * 0.373
>     case (let acc, Troy.Ounce(let quantity)): acc + Double(quantity) * 0.031103
>     case (let acc, Troy.Pennyweight(let quantity)): acc + Double(quantity) * 0.001555
>     case (let acc, Troy.Grain(let quantity)): acc + Double(quantity) * 0.0000648
> }
>
> What you can already do today:
>
> let weightKg = weightTroy.reduce(0.00) { acc, troy in
>     switch troy {
>     case let .Pound(quantity): return acc + Double(quantity) * 0.373
>     case let .Ounce(quantity): return acc + Double(quantity) * 0.031103
>     case let .Pennyweight(quantity): return acc + Double(quantity) * 0.001555
>     case let .Grain(quantity): return acc + Double(quantity) * 0.0000648
>     }
> }
>
> Unless I'm misunderstanding some other great value, this seems like a lot of syntax to save typing "switch troy" and "return”.

Bingo.

> If you forget "return", the compiler will already error for you. I don't think the desired example brings more clarity either.
>
> As to the initialization example:
>
> let str: String = {
>     switch(\$0) {
>     case .Cold: return "Too cold"
>     case .Hot:  return "Too hot"
>     default:    return "Just right"
>     }
> }(state)
>
> Yes, the type must be explicit because Swift cannot figure it out. I'd rather address that issue.
>
> For me, I'm really not seeing the value the complexity of the proposal brings.
>
> -David
>
>> On Feb 2, 2016, at 10:07 PM, Craig Cruden via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>
>> I will wait another 24 hours before resubmitting it (even though this discussion thread is not long)….
>>
>> Anyone that had commented on this in the other thread, but not this one — it would be greatly appreciated if at least one comment (yay or nay) were added to this thread.
>>
>> I think the last thread where this was discussed for at least 10 days and had many more comments - already fleshed everything out.
>>
>>
>>> On 2016-02-03, at 13:03:18, Paul Ossenbruggen <possen at gmail.com <mailto:possen at gmail.com>> wrote:
>>>
>>> Agreed. I really would like this to move forward.
>>>
>>>
>>>> On Feb 2, 2016, at 6:59 PM, Denis Nikitenko via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>>
>>>> +1 from me - I would like to see this discussion continue.  Swift already recognizes the utility of pattern matching for initialization by retaining the ?: operator.  It would be nice to see a more general and flexible solution that is still reasonably concise and doesn’t introduce new keywords and operators - though I’m sure at least some changes to the language would be inevitable.
>>>>
>>>>
>>>>> On Jan 29, 2016, at 1:43 AM, Craig Cruden via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>>>
>>>>> The following proposal apparently was not considered widely enough discussed since it was “buried” in a 400 message discussion thread that meandered before coming to the final draft.
>>>>>
>>>>> As such, to have it reopened — I am restarting the discussion in a new thread to ensure wider discussion.
>>>>>
>>>>>
>>>>> https://github.com/cacruden/swift-evolution/blob/master/proposals/0024-Pattern-Matching-Partial-Function.md <https://github.com/cacruden/swift-evolution/blob/master/proposals/0024-Pattern-Matching-Partial-Function.md>
>>>>>
>>>>>
>>>>> Pattern Matching Partial Function
>>>>>
>>>>
>>>> <snip>
>>>>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto: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/20160203/fe134443/attachment.html>
```