map is just a normal function with type (a -> b) -> [a] -> [b] . Unlike fmap , it is not part of the Functor class. It works exactly the way you think.
The idea of creating classes is that you use types to figure out which implementation to use. When we say instance Functor [] where ... , we tell the compiler what the fmap implementation for [] (a list type).
In this case, the implementation for fmap is just map , which is a normal function.
source share