I would say that one of the main reasons is that you do not always want the module name to be the path to the file added with the file name. This is the same as for Java, C #, and many other languages ββthat prefer an explicit declaration of a namespace in the source code, explicit better than implicit in many cases. This gives the programmer maximum control over the file names, not binding it only to the file name.
Imagine that I was a Japanese Haskell programmer and my OS used Japanese names for file names. I can write my source code using Japanese characters where possible, but I also want to export an API that uses ASCII characters. If the module name and the file name should be identical, this would be impossible, and it would be very difficult for people in other countries to use my library.
And as @chi pointed out, if you have two packages with conflicting module names (this is a very rare occurrence in my experience), you can always use package import.
source share