> the different functions with the same name get merged together

What different functions? There's only one function given in your example, the 
one defined by the type signature:
    
    
    factorial :: (Integral a) => a -> a
    
    
    Run

It's quite wrong to interpret
    
    
    factorial 0 = 1
    factorial n = n * factorial (n - 1)
    
    
    Run

as function definitions--they are _patterns_ , very similar to
    
    
    (a, b) = iReturnATuple()
    
    
    Run

in Nim, which is a limited form of pattern matching.

> As others have already said, it's runtime polymorphism

Anyone who says that is quite wrong. It's no more "runtime polymorphism" than a 
case statement is.

Reply via email to