Well direct casting is unsafe and is to be avoided especially for generics. If the program flow allows it's best to just write. var myVideo = TVideo() var myVideoList = @[TMedia myVideo] # No need to cast when it's not a video list setNewDims(myVideoList) Run
The best way to write the generic solution is proc setNewDims[T: Media](arr:seq[T])= echo arr[0].id Run Nim's generics over inheritance are invariant, this means that just cause two generic parameters are interchangeable the overall type instance is not. It is not a simple problem given you can have the following typedef: type MyType[T] = object when T is Video: someVal: int else: someOtherVal: float Run