--- ---
|a| -- f --> |b|
--- ---
This is fairly simple--using f, you can go from a to b.Now lets imagine a functor F (with f still being our function):
--- ---
|a| -- f --> |b|
--- ---
| |
|F|
\ /
V
---- ----
|a'| -- f' --> |b'|
---- ----
So a functor is just a function at a higher level. A function maps values of one type to values of another type. A functor maps types to other types. In Haskell, types in the Functor class always map types of kind * back onto * , so they're much like functions of type a -> a.The crucial part to notice is that it not only maps between types but it also preserves functions. That is, you get new types corresponding to your old types and new functions corresponding to your old functions.
So the list type, for example, maps any type a to [a] and any function (a -> b) to ([a] -> [b]). In a sense, it is like a well-behaved function between types.
Coincidentally, thinking of functors like this is how I realized that functors in Haskell are not completely unrelated to functors in OCaml--they're just different reifications of the same mathematical idea.