#!r6rs (library (rsc3 u8 u8t) (export u8t? u8t->bytevector) (import (rnrs) (rnrs bytevectors) (only (rsc3 collection list) every) (only (rsc3 collection tree) flatten)) (define (u8t? t) (or (null? t) (let ((e (car t))) (and (or (bytevector? e) (u8t? e)) (every u8t? (cdr t)))))) (define (sum l) (if (null? l) 0 (+ (car l) (sum (cdr l))))) (define (u8t->bytevector t) (let* ((l (flatten t)) (n (map bytevector-length l)) (m (sum n)) (v (make-bytevector m))) (let loop ((i 0) (l l) (n n)) (if (null? l) v (let ((l0 (car l)) (n0 (car n))) (bytevector-copy! l0 0 v i n0) (loop (+ i n0) (cdr l) (cdr n))))))) )