{"size": 1215, "ext": "scrbl", "max_stars_repo_path": "pkgs/racket-doc/syntax/scribblings/for-transform.scrbl", "max_stars_repo_name": "lkh01/racket", "max_stars_repo_stars_event_min_datetime": "2018-07-29T04:13:52.000Z", "max_stars_repo_stars_event_max_datetime": "2022-02-14T16:11:17.000Z", "max_issues_repo_path": "pkgs/racket-doc/syntax/scribblings/for-transform.scrbl", "max_issues_repo_name": "lkh01/racket", "max_issues_repo_issues_event_min_datetime": "2017-08-25T20:26:37.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-26T17:48:40.000Z", "max_forks_repo_path": "pkgs/racket-doc/syntax/scribblings/for-transform.scrbl", "max_forks_repo_name": "lkh01/racket", "max_forks_repo_forks_event_min_datetime": "2016-04-25T11:47:57.000Z", "max_forks_repo_forks_event_max_datetime": "2017-05-09T14:52:48.000Z"}
{"max_stars_count": 10, "max_issues_count": 15, "max_forks_count": 3, "avg_line_length": 30.375, "max_line_length": 79, "alphanum_fraction": 0.7144032922}
#lang scribble/manual
@(require (for-label racket/base
                     racket/sequence
                     syntax/unsafe/for-transform))

@title{Unsafe @racket[for] Clause Transforms}

@defmodule[syntax/unsafe/for-transform]{
The @racketmodname[syntax/unsafe/for-transform] module provides a helper
function that gives access to the sequence transformers defined by 
@racket[define-sequence-syntax]. This is what the @racket[for] forms use and
enables faster 
@tech[#:doc '(lib "scribblings/reference/reference.scrbl")]{sequence} traversal
than what the sequence interface provides.

The output may use unsafe operations.}

@defproc[(expand-for-clause [orig-stx syntax?] [clause syntax?]) syntax?]{

Expands a @racket[for] clause of the form @racket[[(x ...) seq-expr]], where
@racket[x] are identifiers, to:

@racketblock[
(([(outer-id ...) outer-expr] ...)
 outer-check
 ([loop-id loop-expr] ...)
 pos-guard
 ([(inner-id ...) inner-expr] ...)
 pre-guard
 post-guard
 (loop-arg ...))]

which can then be spliced into the appropriate iterations. See @racket[:do-in]
for more information.

The result may use unsafe operations.

The first argument @racket[orig-stx] is used only for reporting syntax errors.
}
