> On Dec 22, 2016, at 7:43 PM, Robert Widmann <[email protected]> wrote:
> 
> Do you think there’s room for a more general Pattern Synonyms-like 
> <https://ghc.haskell.org/trac/ghc/wiki/PatternSynonyms> feature that could 
> extend this to things that look tuple-y?  We had a short conversation on 
> Twitter 'round about the release of Swift 1.2 about Swiftz’s HList 
> <https://github.com/typelift/Swiftz/blob/master/Sources/HList.swift#L185> 
> implementation and my desire to be able to destructure them into tuples for 
> native pattern matching.

My personal favorite design for user-extensible pattern syntax is F#'s "active 
pattern" feature, which lets you declare a set of mutual exclusive, total or 
partial conditions along with a function body that computes which condition 
holds. For the specific case of container patterns, though, I feel like it's 
worth keeping a close association with Collection semantics, so that:

- [] matches when the incoming collection's startIndex == endIndex,
- [<pattern>, <pattern-list>] fails if startIndex == endIndex, or else matches 
collection[startIndex] against <pattern> and recursively matches 
collection[startIndex.advancedBy(1)..<endIndex] against [<pattern-list>]
- [<pattern>...] matches the remaining collection against <pattern>

-Joe
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to