: empty ( -- List )         :Empty variant.make-0 ;
: prepend ( T List -- List ) :Cons variant.make-2 ;
: empty? ( List -- Bool )    variant.tag :Empty symbol.= ;

: head ( List -- T )
    0 variant.field-at
;

: tail ( List -- List )
    1 variant.field-at
;

: test-head ( -- )
    empty 3 swap prepend 2 swap prepend 1 swap prepend
    head 1 test.assert-eq
;

: test-tail-head ( -- )
    empty 3 swap prepend 2 swap prepend 1 swap prepend
    tail head 2 test.assert-eq
;
