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
>>>>
>>>
>>> ​
>>
>
>

Reply via email to