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

John A. De Goes john at n-brain.net
Thu Feb 19 09:09:42 EST 2009

On Feb 14, 2009, at 2:29 PM, Luke Palmer wrote:
> To me, typeclasses are at their best when you have a real  
> abstraction to encode.

I agree.

> If you are having trouble using a typeclass and need C++-style ad- 
> hoc overloading, it's likely you are trying to encode a "fake"  
> abstraction -- one that has only linguistic, rather than  
> mathematical meaning.

I don't think what you're calling a "linguistic" abstraction is  
"fake". Words and operators have connotations in the minds of those  
reading them. There's a reason I choose the word, 'flatten' rather  
than 'sdj834' to name a function -- because the word 'flatten'  
suggests what I am trying to accomplish with the function.

Let's try a little test:

     1. If the parameter is a tree, what do you think "flatten" would  
     2. If the parameter is a list, what do you think "flatten" would  
     3. If the parameter is a Style (possible a composite Style  
consisting of other styles), what do you think "flatten" would do?
     4. If the parameter is a Bezier curve, what do you think  
"flatten" would do?

My guess is that we would come to the same conclusions for (1) - (4).  
The name "flatten" is a perfectly good name for all of these  
operations, because the domains are distinct, and because using that  
name suggests the correct meaning to you. (Note use of the word  
"suggests" -- like an analogy or parable, you're likely not going to  
know exactly what the function does just by reading its name, but  
you'll be in the ballpark and have an intuition about it, which is  
extremely valuable.)

In the current world, "flatten" will be appended with (usually non- 
informative) suffixes, or alternate, less-descriptive names chosen.

Informative coding is about drawing upon our common pool of experience  
to mold the form and function of programs to suggest our intentions to  


John A. De Goes
The Evolution of Collaboration

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

More information about the Haskell-Cafe mailing list