 
 : nil ( -- cons )
   T{ cons f f f } ;
+    
+: uncons ( cons -- cdr car )
+    [ cdr ] [ car ] bi ;
 
-M: cons nil? ( cons -- bool )
-    nil eq? ;
-
+M: cons nil? ( cons -- ? )
+    uncons and not ;
+    
 : 1list ( obj -- cons )
     nil cons ;
     

    [ <reversed> ] keep nil [ tuck same? [ seq>cons ] when f cons swap >>cdr ] with reduce ;
    
: cons>seq ( cons -- array )    
    [ ] lmap ;
    
INSTANCE: cons list
    
: 3car ( cons -- car caar caaar )    
    [ car ] [ cdr car ] [ cdr cdr car ] tri ;

: lnth ( n list -- elt )
    swap [ cdr ] times car ;
