export default abstract class List { static Nil: List; static concat(...lists: Array>): List; static join(l1: List, l2: List): List; static singleton(el: T): List; static append(list: List, el: T): List; abstract traverse(cb: (x: T) => void): void; abstract getFirst(): T; }