> 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