6.3.90.900
7.6 mischief/fold: Folding Over Common Datatypes
| (require mischief/fold) | package: mischief-dev | 
procedure
(datum-fold x [ #:short-circuit fold-short-circuit #:list fold-list #:list* fold-list* #:vector fold-vector #:box fold-box #:prefab fold-prefab #:hash fold-hash #:hash-eq fold-hash-eq #:hash-eqv fold-hash-eqv #:hash-equal fold-hash-equal #:syntax fold-syntax #:other fold-other]) → any/c x : any/c 
fold-short-circuit : (-> any/c (-> any/c) any/c) = default-fold-short-circuit fold-list : (-> list? any/c) = default-fold-list 
fold-list* : (-> list? (not/c list?) any/c) = default-fold-list* fold-vector : (-> list? any/c) = default-fold-vector fold-box : (-> any/c any/c) = default-fold-box 
fold-prefab : (-> prefab-key? list? any/c) = default-fold-prefab fold-hash : (-> hash? list? list? any/c) = default-fold-hash 
fold-hash-eq : (-> list? list? any/c) = (arg+ default-fold-hash (hasheq)) 
fold-hash-eqv : (-> list? list? any/c) = (arg+ default-fold-hash (hasheqv)) 
fold-hash-equal : (-> list? list? any/c) = (arg+ default-fold-hash (hash)) fold-syntax : (-> syntax? any/c any/c) = default-fold-syntax 
fold-other : (-> (-> any/c any/c) any/c any/c) = default-fold-other 
Constructs a result by folding over x.  At each recursive step, first
calls fold-short-circuit with the current input value and a thunk that
computes the result for that value.  If that thunk is called, continues using
fold-list, fold-list*, fold-vector,
fold-box, fold-prefab, fold-hash-eq,
fold-hash-eqv, fold-hash-equal, fold-syntax, and
fold-other as appropriate.  All of the above functions except
fold-other are called with the result of recurring on their sub-parts;
fold-other is called with a recursive folding procedure and the
current input value.
procedure
(default-fold-short-circuit x proc) → any/c
x : any/c proc : (-> any/c) 
procedure
(default-fold-list xs) → any/c
xs : list? 
procedure
(default-fold-list* head tail) → any/c
head : list? tail : (not/c list?) 
procedure
(default-fold-vector xs) → any/c
xs : list? 
procedure
(default-fold-box x) → any/c
x : any/c 
procedure
(default-fold-prefab key fields) → any/c
key : prefab-key? fields : list? 
procedure
(default-fold-hash table keys vals) → any/c
table : hash? keys : list? vals : list? 
procedure
(default-fold-syntax stx x) → any/c
stx : syntax? x : any/c 
procedure
(default-fold-other proc x) → any/c
proc : (-> any/c any/c) x : any/c 
Default folding functions.  The default-fold-short-circuit function
simply calls the provided thunk; default-fold-other returns its second
argument.  The other functions reconstitute their arguments into the
corresponding data type (list, improper list, etc.).