Scala Diamond Problem Explained