>>10
Types are supposed to be only compiler hints that result in faster code
That's an opinion and if it's what you believe, then like I said, use a language that does what you want and accept the fact that what you want isn't what everybody else wants.
What if I don't know how many parameters will I want to supply to the function?
Then you use a list, and if you want different types, wrap it in another type like
data T = A Int | B String | .... It's not pretty, and nobody is claiming that Haskell's type system is perfect, but it's safer than true homogenous lists. If safety isn't that important to you, then for the third time, Haskell isn't what you want so just use something else.
Also, you can implement a variable number of arguments of different types in Haskell (
http://hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/Text-Printf.html), but usually I would do it a different way.