<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 12, 2016, at 1:46 PM, Brandon Williams via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Right now instance methods on a type get a curried, static method for free, e.g. CGRect.insetBy is a curried function CGRect -> (CGFloat, CGFloat) -> CGRect. This is super cool and great for code reusability. <div class=""><br class=""></div><div class="">Unfortunately, I think the order of the curry makes it difficult to use most of the time. With the above example you would use it as such:</div><div class=""><br class=""></div><div class="">CGRect.insetBy(rect)(10.0, 10.0)</div><div class=""><br class=""></div><div class="">That doesn’t read very nicely, and it’s more likely that you know (10.0, 10.0) before you know rect, hence you would want to call it as:</div><div class=""><br class=""></div><div class="">CGRect.insetBy(10.0, 10.0)(rect)</div><div class=""><br class=""></div><div class="">In general, I would expect a method:</div><div class=""><br class=""></div><div class="">struct A {</div><div class=""> func method <B, C> (b: B) -> C</div><div class="">}</div><div class=""><br class=""></div><div class="">to have a static method of the form</div><div class=""><br class=""></div><div class="">A.method: B -> A -> C</div><div class=""><br class=""></div><div class="">Does this make sense? Is there a reason for the current design that I’m not seeing?</div></div></div></blockquote><br class=""></div><div>Note that there's a proposal open to flatten away the currying altogether:</div><div><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md</a></div></blockquote><div><br class=""></div><div>I agree that it would often be more useful to bind the non-self arguments first. Maybe we could provide a different shorthand for that, though; a number of people for instance have suggested `.insetBy(10.0, 10.0)` as a possibility.</div><div><br class=""></div><div>-Joe</div></body></html>