Haskell supports it via typeclass resolution, which is mostly a source of
confusion to newcomers who assume (read :: Read a => String -> a) must be
deciding what to produce based on the String because they're not expecting
return type polymorphism. It doesn't seem to be a problem otherwise.
(Multiparameter typeclasses have a bigger problem, return type polymorphism
being only one of several ways to expose it.)

On Fri, Oct 5, 2018 at 2:03 PM Trey Harris <t...@lopsa.org> wrote:

>
>
> On Fri, Oct 5, 2018 at 1:13 PM Brandon Allbery <allber...@gmail.com>
> wrote:
>
>> My problem with it being in the signature is still that it doesn't say
>> which part of the contract it applies to; it appears to be claiming it's
>> part of dispatch, when it's not.
>>
>
> Explicit argument polymorphism has been shown to be useful and increasing
> in elegance more often than it causes debugging complexity, while return
> polymorphism has generally been a nightmare in languages that have tried
> it, no? True that no other polymorphic language (AFAIK, but haven’t looked
> lately) has true multimethods, but my guess is that return polymorphism
> would be even worse within multiple dispatch than in single-dispatch
> languages.
>
> Not that I thought you were arguing that --> *should* apply to dispatch,
> just trying to get everyone on the same page in case we’re not (and maybe
> I’m the one who needs my page flipped to the same place in the hymnal).
>
> But right now we have a situation where “everything within the signature 
> *except
> for* the return constraint can participate in multi dispatch”, which does
> feel weird. But is that actually true? Something’s nagging at me that
> there’s something else in this category as well, but I can’t think what.
> (Recursive multi dispatch on signatures of multi Callable arguments,
> maybe? I would try but my machine’s offline upgrading….) If there are more
> rules about what participates in multi dispatch than “change anything in
> the signature to the left of the --> and you’re good”, then it’s probably
> acceptable for --> to not participate either—it’s already more complex
> than it looks.
> ​
>
>
>
>>
>> On Fri, Oct 5, 2018 at 12:01 PM Larry Wall <la...@wall.org> wrote:
>>
>>> On Thu, Oct 04, 2018 at 09:35:08PM +0200, JJ Merelo wrote:
>>> : El jue., 4 oct. 2018 21:21, Brandon Allbery <allber...@gmail.com>
>>> escribió:
>>> :
>>> : > I don't think we've reached the point of such conventions yet. And
>>> there's
>>> : > some history here, in --> not having done anything in the early days
>>> except
>>> : > possibly slow things down, and between --> and 'returns' (which is
>>> now
>>> : > deprecated).
>>> : >
>>> :
>>> : Not yet. Maybe never...
>>>
>>> --> generalizes to pointy blocks and such.  'returns' doesn't.
>>>
>>> --> allows return of explicit literal Nil and True and 42.  'returns'
>>> doesn't.
>>>
>>> --> makes the return an official part of the routine's contract.
>>> 'returns' doesn't.
>>>
>>> For various purposes it would be nice to know we have the entire in/out
>>> contract
>>> before we start processing all the oh-by-the-way traits that can turn
>>> the contract
>>> into a time-traveling brain pretzel.  For instance, what if one of the
>>> phaser traits
>>> needs to know will be returned, and the 'returns' comes after that?
>>> Putting in error
>>> messages that say "Too late for returns trait" is a design smell...
>>>
>>> So never say never.  :)
>>>
>>> Larry
>>>
>>
>>
>> --
>> brandon s allbery kf8nh
>> allber...@gmail.com
>>
>

-- 
brandon s allbery kf8nh
allber...@gmail.com

Reply via email to