Q:

Why prepend behaves differently on a Seq depending on how you call it?

If I use the infix notation, I can append to an immutable Seq no trouble:
scala> Seq("b", "c") :+ "d"
res2: Seq[String] = List(b, c, d)

But if I'm trying a prepend, it considers the String instance as a Seq itself and result is different:
scala> Seq("b", "c") +: "a"
res3: scala.collection.immutable.IndexedSeq[Any] = Vector(List(b, c), a)

However, calling the method in a classic way does what is "expected": 
scala> Seq("b", "c").+:("a")
res4: Seq[String] = List(a, b, c)

Why is it behaving this way and what method should be privileged to prepend a String element to a Seq[String] (idiomatic scala)?

Environment: Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_79).

A:

Every method ending with a colon (:) is right associative when used in the infix notation.
So you need to do "a" +: Seq("b", "c").
Seq("b", "c") +: "a" worked because String is a IndexedSeq[Char] and you are prepending a Seq (with List as default implementation via Seq.apply) to this String, so you get IndexedSeq[Any].

