I agree that it should be completely implicit.
  

  
KeyPaths are simply chains of partially-applied properties and subscripts. At 
the same time, it was noted in the KeyPath proposal that a similar mechanism 
might be used to model chains of partially-applied functions. I think that 
having both types be convertible to a closure would be sensible.
  

  
In fact, you could argue for a general-purpose “Executable” protocol which 
would allow any conforming object to be implicitly used as a function/closure. 
Command-style objects such as predictes and transformers would also benefit 
from such a feature.
  

  
- Karl
  

  

  

  

  
  

  
  
>   
> On Jul 8, 2017 at 11:56 pm,  <Benjamin Herzog via swift-evolution 
> (mailto:swift-evolution@swift.org)>  wrote:
>   
>   
>     
> Is this operator common in other languages? I would actually expect that the 
> conversation is not 'almost-implicit' but completely implicit instead. I 
> think both - a prefix and postfix operator - are not obvious enough what 
> happens here,   especially because this kind of conversion is not happening 
> in other parts of the language.  
> All conversions are implicit (from explicit type to protocol, from Swift 
> stdlib types to Objective-C types, from any type to Any, …) currently.
>   
>
>   
>   
> ______________________
>   
>
>   
> Benjamin Herzog
>   
>   
>   
>     
>   
> >   
> > On 8. Jul 2017, at 22:10, Hooman Mehr via swift-evolution  
> > <swift-evolution@swift.org (mailto:swift-evolution@swift.org)>  wrote:
> >   
> >   
> >     
> > I like this promote operator idea. I have been defining similar operators 
> > for specific projects almost at random. It makes sense to come up with a 
> > well-defined behavior and name for such operators, as a common practice as 
> > you suggest.  
> >
> >   
> > The problem with the postfix operator is that it does not currently work 
> > without an extra set of parenthesis:
> >   
> >
> >   
> >   
> > postfix  operator  ^
> >   
> >
> >   
> > postfix   func  ^<T,U>(lhs:  KeyPath<T,U>) ->  (T)->U  {  return  { 
> > $0[keyPath: lhs] } }
> >   
> >
> >   
> > struct  Guy {  let  name:  String  }
> >   
> >
> >   
> > let  guys = [
> >   
> >         Guy(name:  "Benjamin"),
> >   
> >         Guy(name:  "Dave"),
> >   
> >         Guy(name:  "Brent"),
> >   
> >         Guy(name:  "Max")
> >   
> > ]
> >   
> >
> >   
> > guys.map(\.name^)  // Error: Invalid component of Swift key path
> >   
> >
> >   
> > guys.map((\.name)^)  // This works
> >   
> >   
> >
> >   
> > Is this a bug?   
> >   
> >
> >   
> > That is the reason I used a prefix operator (~) in my suggestion in the a 
> > previous e-mail on this thread.
> >   
> >   
> >   
>   
>   
>  _______________________________________________ swift-evolution mailing list 
> swift-evolution@swift.org 
> https://lists.swift.org/mailman/listinfo/swift-evolution        
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to