[Haskell-cafe] Re: Overloading functions based on arguments?

John A. De Goes john at n-brain.net
Fri Feb 13 13:12:07 EST 2009


I come from a mathematical background (in which it is quite common to  
"overload" function names and operators in particular), so from my  
point of view, the lack of name overloading is a wart on Haskell. That  
such a feature would complicate type inference is more a concern to an  
implementor, not to an end-user of Haskell like myself.

Regards,

John A. De Goes
N-BRAIN, Inc.
The Evolution of Collaboration

http://www.n-brain.net    |    877-376-2724 x 101

On Feb 13, 2009, at 10:16 AM, Neil Mitchell wrote:

> Hi
>
>> Chances are the program you're using to write your e-mails was  
>> written in
>> C++ (or at least C), so don't knock it. :-)
>
> Firefox (Javascript + C++) and Gmail (Python, so I think I read, no
> doubt with C underneath somewhere). However, I am sat writing C++ at
> the moment - which I think gives me the right to say that C++ is a
> bloated and ugly language.
>
>> In any case, no one has really addressed the original poster's  
>> question: No,
>> "name overloading" is not possible in Haskell, and surprisingly,  
>> there are
>> no blocking technical issues why this must be the case.
>
> Name overloading is not possible currently. You could encode name
> overloading as type classes internally and add the feature, but it
> complicates type inference substantially. When I first started doing
> Haskell I remember asking why we didn't have overloaded names. Now, I
> ask the question why anyone could possibly want overloaded names.
> Having drunk the functional kool-aid I've decided they are deeply
> confusing :-)
>
> Thanks
>
> Neil
>
>>
>>> Hi
>>>
>>>> Table is a table of name-value pairs I want to substitute in a  
>>>> tree-like
>>>> structure using:
>>>>
>>>> substitute :: Table -> Tree -> Tree
>>>>
>>>> For substituting a single name-value pair I want to define this  
>>>> utitlity
>>>> routine so I don't have to construct a Table all the time in the  
>>>> user
>>>> code:
>>>>
>>>> substitute :: String -> Value -> Tree -> Tree
>>>
>>> Why not:
>>>
>>> substituteValue :: String -> Value -> Tree -> Tree
>>> substituteValue x y = substitute (table1 x y)
>>>
>>>> In the case I believe it would certainly be good to be able to  
>>>> name both
>>>> functions the same, but I fear I can not do so?  There are  
>>>> languages
>>>> where
>>>> this is explicitelly allowed (e.g. C++ or Java), so I don't think  
>>>> it is
>>>> such
>>>> an unuseful or evil thing.
>>>
>>> Languages like C++ and Java allow mutable state, object-orientated
>>> programming and require massively verbose code - all of which are
>>> unuseful and evil :-)
>>>
>>> I think this is a case of trying to apply C++/Java thoughts on to
>>> Haskell, you can map the concepts directly, but you really  
>>> shouldn't.
>>> Try writing multiple methods with many names, or simple utility
>>> functions to convert between the cases, and it will go much nicer.
>>>
>>> Thanks
>>>
>>> Neil
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>



More information about the Haskell-Cafe mailing list