Question: Given:

```
case class Thing(a:Int, b:String, c:Double)

val v = Vector(1, "str", 7.3)

```

I want something that will magically create:

```
Thing(1, "str", 7.3)

```

Does such a thing exist (for arbitrary size Things)?

Answer: 
I don't know if it's possible to get a working solution with a compile-time error, but this is my solution using matching:

```
case class Thing(a: Int, b: String, c: Double)
def printThing(t: Thing) {
  println(t.toString)
}

implicit def vectToThing(v: Vector[Any]) = v match {
  case (Vector(a: Int, b: String, c: Double)) => new Thing(a, b, c)
}

val v = Vector(1, "str", 7.3) // this is of type Vector[Any]
printThing(v) // prints Thing(1,str,7.3)
printThing(Vector(2.0, 1.0)) // this is actually a MatchError

```

Is there an actual purpose to this "Thing"-conversion or would you rather use Tuple3[Int,String,Double] instead of Vector[Any]?
From your question it's not clear what you will use it for. What you call a Thing might actually be a HList or a KList. HList stands for *Heterogeneous Lists* which is an "arbitrary-length tuple".

I am unsure how hard it would be to add an 'unnapply' or 'unapplySeq' method in order for it to behave more like a case class.

I have little experience with them, but a good explanation can be found here: <http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/>

If this is not what you need it might be a good idea to tell us what you want to achieve.