I’m a Nim newbie, haven’t used seq much, and I’m making the assumption that seq is a reference type, ie. passed by reference not by value. If that’s wrong, ignore this!)
You can’t assign an instance of seq[B] to a variable of type seq[A], because you could then use that variable to add a non-B object to the seq. Basically, seq[A] has looser constraints about what it can contain than seq[B] does. By analogy: I make a scrapbook of photos of cats. You come over while I’m out, pick up the book and say “oh, it’s a book of animal pictures! I’ll add this cute photo of my pet snake.” Then I find the photo later and am all “WTF is this snake doing with my cat pictures?!” Incidentally, this is only a problem if seq assignment is by-reference — otherwise it’s like you made a copy of my cat-photos book. Now you have your own animal-photos book and can paste snakes into it with no problem. It’s also only an issue if the variable assigned to is mutable — otherwise it’s like you pick up my book but have the courtesy to understand that you aren’t allowed to change it. (In type theory this kind of issue is referred to as _contravariance_.)
