     ] assoc-each table ;
 
 :: process-category ( data -- category-listing )
-    [let | table [ num-chars <byte-array> ] |
-        2 data (process-data) [| char cat |
-            cat categories index char table ?set-nth
-        ] assoc-each table fill-ranges ] ;
+    num-chars <byte-array> :> table
+    2 data (process-data) [| char cat |
+        cat categories-map at char table ?set-nth
+    ] assoc-each table fill-ranges ;
 
 : process-names ( data -- names-hash )
     1 swap (process-data) [

      "Zs" "Zl" "Zp"
      "Cc" "Cf" "Cs" "Co" }

CONSTANT: num-chars HEX: 2FA1E

! the maximum unicode char in the first 3 planes

math.parser hash2 math.order byte-arrays words namespaces words
compiler.units parser io.encodings.ascii values interval-maps
ascii sets combinators locals math.ranges sorting make
strings.parser io.encodings.utf8 memoize ;
IN: unicode.data

VALUE: simple-lower
