Я думаю, что ваша путаница возникает из-за попыток сделать это с помощью дженериков. Что вы пытаетесь сделать, так это, если я правильно понял, это объявить односвязный список объектов, который может быть любого типа. Более того, вы не хотите объявлять этот тип во время компиляции. Это означает, что вам придется делать это с помощью RTTI, используя модуль typeinfo Нима. Обратите внимание, что модуль typeinfo не рекомендуется, так как он имеет много ошибок, а именно относительно времени жизни объектов.
Вот обобщенная последовательность c с использованием typeinfo:
import typeinfo
type
genSeq = ref object
data: Any
down: genSeq
var intDatum = 3
var strDatum = "hello, world!"
let child = genSeq(data: strDatum.toAny, down:nil)
let a = genSeq(data: intDatum.toAny, down: child)
echo a.data.getInt # echos 3
echo a.down.data.getString # echos "hello, world!"
Однако, это может быть не то, что вы хотите, так как RTTI, как правило, дорого. Если набор объектов, которые вы хотите использовать, ограничен, вы можете использовать регистр выражений для получения того же результата без ограничений RTTI.
Для будущих вопросов вы также можете сделать кросс-пост на форуме nim: forum.nim-lang.org для более быстрого ответа.