pub struct List { pub mut: head &ListNode = 0 } pub struct ListNode { pub mut: value T next &ListNode = 0 } pub fn list_new() List { return List{} } pub fn (mut l List) add(value T) { mut node := &ListNode{value, 0} if l.head == 0 { l.head = node } else { node.next = l.head l.head = node } } fn test_generic_assign_reference_generic_struct() { mut list1 := list_new() list1.add('hello') println(list1.head.value) assert list1.head.value == 'hello' mut list2 := list_new() list2.add(100) println(list2.head.value) assert list2.head.value == 100 mut list3 := list_new() list3.add(22.2) println(list3.head.value) assert list3.head.value == 22.2 mut list4 := list_new() list4.add(true) println(list4.head.value) assert list4.head.value == true }