I'm trying to play with HList's from Shapeless.

This is my first try:

```
trait Column[T] {
     val name: String
}

case class CV[T](col: Column[T], value: T)

object CV {
    object columnCombinator extends Poly2 {
        implicit def algo[A] = at[(String, String, String), CV[A]] { case ((suffix, separator, sql), cv) ⇒
            (suffix, separator, if (sql == "") cv.col.name+suffix else sql+separator+cv.col.name+suffix)
        }
    }

    def combine[A <: HList](columns: A, suffix: String, separator: String = " and ")
                           (implicit l: LeftFolder[A, (String, String, String), columnCombinator.type]): String =
        columns.foldLeft((suffix, separator, ""))(columnCombinator)._3
}

```

The problem is I don't know what `foldLeft` does return in this example.

I expect it to return `(String, String, String)`, but the compiler tells me that returns `l.Out`. What is `l.Out`?

The source code is a little complicated to guess it.

There isn't much information in the web about this.

Some information I've consulted:

* [Shapeless Tests](https://github.com/milessabin/shapeless/blob/master/core/src/test/scala/shapeless/hlist.scala)
* [Shapeless documentation](https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0)