[swift-evolution] higher kinded types vs Python's syntactic sugars

T.J. Usiyan griotspeak at gmail.com
Fri Dec 18 19:46:57 CST 2015


Updated the library with that. The only downside that I can see is that
flattening, as I had always planned but finally bothered to do, has no way
to tell if the left tuple was the produce of a previous cartesian product
operation. Small price to pay and all that. Thanks for the insight!

On Fri, Dec 18, 2015 at 8:19 PM, T.J. Usiyan <griotspeak at gmail.com> wrote:

> That is… damned nice. I choose not to feel that bad about it… for reasons.
>
>
>
> On Fri, Dec 18, 2015 at 8:04 PM, Dave Abrahams <dabrahams at apple.com>
> wrote:
>
>>
>> On Dec 18, 2015, at 4:35 AM, Al Skipp via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> On 18 Dec 2015, at 00:19, T.J. Usiyan via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> With a Cartesian Product type [like this](
>> https://github.com/griotspeak/CartesianProduct), the for-in-where syntax
>> actually gets us to list comprehensions. I'll admit that I might not have
>> implemented the best Cartesian Product type possible, but it should
>> illustrate that we have what we need.
>>
>> `for case … in cartProd(cartProd(seq1, seq2), seq3) // An operator for
>> cartProd would make it more pleasing to read.`
>>
>>
>> That’s impressive work, but it strikes me as quite a difficult
>> undertaking to get there. (Is it just me, or are generators and sequences
>> the most scary part of Swift?) Also, is it possible to get it working as an
>> expression, or is it restricted to a ‘for’ statement? If it can only be
>> performed as a ‘for’ statement it will still need an external mutable var
>> to be updated outside of the loop. It’s fine if you want to just do
>> side-effecty things, like print the elements, but I’d consider the ability
>> to return a value to be more important.
>>
>>
>> This is a much simpler cartesian product implementation:
>>
>>    seq1.flatMap { x in seq2.map { (x,$0) } }
>>
>> or, if you want speed,
>>
>>    seq1*.lazy*.flatMap { x in seq2*.lazy*.map { (x,$0) } }
>>
>> HTH,
>>
>> -Dave
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151218/c909375f/attachment.html>


More information about the swift-evolution mailing list