title: Explain Traverse[List] implementation in scalaz-seven
body: <p>I'm trying to understand the <code>traverseImpl</code> implementation in <a href="https://github.com/scalaz/scalaz/blob/scalaz-seven/core/src/main/scala/scalaz/std/List.scala#L47" rel="noreferrer">scalaz-seven</a>:</p>
  
  <pre><code>def traverseImpl[F[_], A, B](l: List[A])(f: A =&gt; F[B])(implicit F: Applicative[F]) = {
    DList.fromList(l).foldr(F.point(List[B]())) {
       (a, fbs) =&gt; F.map2(f(a), fbs)(_ :: _)
    }
  }
  </code></pre>
  
  <p>Can someone explain how the <code>List</code> interacts with the <code>Applicative</code>? Ultimately, I'd like to be able to implement other instances for <code>Traverse</code>.</p>