type List = Int | (Int, List);
fn add(list: List, number: Int) -> List {
return (*number, *list);
}
fn rest(list: @List) -> @List {
return list.as<@(Int, List)>().get_1();
}
fn size(list: @List) -> Int {
if list.is<@Int>() {
return 1;
}
return 1 + list.rest().size();
}
let list: List = 1.add(2).add(3).add(4).add(5).add(6);
if list.size() != 6 {
panic("Incorrect size");
}
list = *list.rest();
if list.size() != 5 {
panic("Incorrect size");
}
list = *list.rest();
if list.size() != 4 {
panic("Incorrect size");
}