Ah, nice, good to know my concern was unwarranted. On Thu, Sep 8, 2016 at 3:04 PM Aaron Sherman <a...@ajs.com> wrote:
> In Perl 6, we apply those constraints when you pass off the call to the > ultimate recipient, and that's important because that recipient can have > multiple signatures (and signatures can be added *after* you define the > flip). > > For example: > > $ cat foo.p6 > > > sub flip(&f) { -> $b, $a, |c { f($a, $b, |c) } } > > multi sub counter(Int $start, Int $end, :$by=1) { > $start, *+$by ... $end > } > multi sub counter(Str $start, Str $end, :$by=1) { > ($start.ord, *+$by ... $end.ord).map: {.chr} > } > > my &flip-counter = flip &counter; > > say flip-counter 10, 2, :by(2); > say flip-counter 'q', 'k', :by(2); > say flip-counter 3.7, 1, :by(2); > > $ perl6 foo.p6 > (2 4 6 8 10) > (k m o q) > Cannot resolve caller counter(Int, Rat, Int); none of these signatures > match: > (Int $start, Int $end, :$by = 1) > (Str $start, Str $end, :$by = 1) > in block <unit> at foo.p6 line 3 > > > > > > Aaron Sherman, M.: > P: 617-440-4332 Google Talk, Email and Google Plus: a...@ajs.com > Toolsmith, developer, gamer and life-long student. > > > On Thu, Sep 8, 2016 at 2:41 PM, Trey Harris <t...@lopsa.org> wrote: > >> On Thu, Sep 8, 2016 at 9:23 AM Aaron Sherman a...@ajs.com >> <http://mailto:a...@ajs.com> wrote: >> >> I don't know Haskell, but isn't flip just: >>> >>> sub flip(&f) { -> $b, $a, |c { f($a, $b, |c) } } >>> >>> And then: >>> >>> perl6 -e 'sub flip(&f) { -> $a, $b, |c { f($b, $a, |c) } }; my &yas = >>> flip &say; yas(1,2,3)' >>> 213 >>> >>> Yes—but my worry about that was that it wouldn’t carry over signature >> constraints and coercions as a specific argument-flipper sub written with >> the same signature (flipped). Haskell does deep type inference, unlike Perl >> 6, so simply writing flip f x y = f y x is sufficient to get exactly the >> same behavior in constrained or coercive contexts. >> >> >>> Aaron Sherman, M.: >>> P: 617-440-4332 Google Talk, Email and Google Plus: a...@ajs.com >>> Toolsmith, developer, gamer and life-long student. >>> >>> >>> On Wed, Sep 7, 2016 at 6:13 PM, Brandon Allbery <allber...@gmail.com> >>> wrote: >>> >>>> On Wed, Sep 7, 2016 at 6:08 PM, Parrot Raiser <1parr...@gmail.com> >>>> wrote: >>>> >>>>> There is a "flip" in P6, to reverse the characters in a string, and a >>>>> "reverse", to return the elements of a list. Would either of those be >>>>> an equivalent? >>>>> >>>> >>>> Not without an "apply" mechanism used for function / method / operator >>>> invocations. Which is almost viable in Perl 6 since the parameters get >>>> passed as a list --- except that the list is only visible within the >>>> implementation, not at the call site (which is what "apply" does). >>>> >>>> -- >>>> brandon s allbery kf8nh sine nomine >>>> associates >>>> allber...@gmail.com >>>> ballb...@sinenomine.net >>>> unix, openafs, kerberos, infrastructure, xmonad >>>> http://sinenomine.net >>>> >>> >>> >> > >