The concepts are fairly closely related but each entails something the other does not. Functor entails parametric polymorphism with respect to the contents of the container. And a visitor can extract a result from the traversal.
 
As a result you may want to think in terms of a Traversable or Foldable functor rather than just a Functor. These will let you extract a monadic or applicative result from your container.
 
Now, as for your actual question, Applicative functors are really hard to model in other languages. With C++ templates you can probably get a weak approximation with something like the encoding used here, possibly mixed with some boost magic for a usable function type:
 
http://www.reddit.com/r/programming/comments/8bx33/a_comparison_of_c_concepts_and_haskell_type/
 
But I can't think of anyone that would try to use it in production code, and there are many common idioms that that style of translation can't account for (i.e. polymorphic recursion).
 
-Edward Kmett
 
On Wed, Jun 3, 2009 at 9:10 AM, Tom.Amundsen <tomamundsen@gmail.com> wrote:

So, last night, I was having this problem with my Java code where I couldn't
figure out for the life of me how to write a piece of code without a big if
{} else if {} else if {} ... else {} structure. I was Googling "Java
Reflection" to try to determine how to "cast to the most concerete subclass
at runtime." Then it dawned on me that what I was trying to do has already
been solved by using the Visitor design pattern.

Then, after reading the Visitor design pattern page on Wiki, it said that
the visitor pattern is essentially an implementation of a functor. Aha! It
totally clicked. The Visitor pattern allows you to collect code for similar
operations, while spreading apart code for similar objects. Now that really
sounds like a functor!

Although, now I'm second guessing myself, because I can't figure out how we
could create some design pattern that simulates an applicative functor. I'm
pretty sure the Visitor pattern doesn't take you this far (but I am willing
to be corrected). So, is there a way to create applicative functors in
non-functional languages? What would that pattern look like?

- Tom
--
View this message in context: http://www.nabble.com/Functors-and-the-Visitor-Pattern-tp23851113p23851113.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe