This is the same problem as https://github.com/racket/racket/issues/3355.
It's already been fixed in Racket 7.9.

On Fri, Nov 6, 2020 at 5:30 AM Shriram Krishnamurthi <[email protected]>
wrote:

> Has something changed in how `error` works across modules? This code that
> I used last year without trouble seems to run into trouble now.
>
> Here's the code all in one module:
>
> #lang racket
>
> (provide yield resume)
>
> (define resumer #f)
>
> (define (yield)
>   (let/cc k
>     (set! resumer k)
>     (error 'yield "yielding computation")))
>
> (define (resume)
>   (resumer 'dummy))
>
> (define (fact n)
>   (if (= n 0)
>       1
>       (begin
>         (when (= (remainder n 10) 0)
>           (yield))
>         (* n (fact (- n 1))))))
>
> It results in the following (desired) interaction:
>
> > (fact 10)
> . . yield: yielding computation
> > (resume)
> 3628800
>
> But now I'm going to remove the definition of `fact` and put it in another
> module, saving the remainder as `yielder.rkt`:
>
> #lang racket
>
> (require "yielder.rkt")
>
> (define (fact n)
>   (if (= n 0)
>       1
>       (begin
>         (when (= (remainder n 10) 0)
>           (yield))
>         (* n (fact (- n 1))))))
>
> Now I get the following error. What should I be doing instead?
>
> > (fact 10)
> -- #(struct:exn:fail:contract "vector-ref: contract violation\n
> expected: vector?\n  given: '((error 'yield \"yielding computation\")
> #<path:/Users/sk/Desktop/yielder.rkt> 10 4 113 37)\n  argument position:
> 1st\n  other arguments...:\n   0" #<continuation-mark-set>)
>   (errortrace-stack-item->srcloc . #(struct:srcloc
> #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 168 0 6297
> 203))
>   (pick-first-defs . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 331 0 13000
> 425))
>   (get-exn-source-locs . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 585 0 23184
> 391))
>   (#f . #(struct:srcloc #<path:/Applications/Racket
> v7.8/collects/racket/contract/private/arrow-val-first.rkt> 486 18 20735 32))
>   (error-display-handler/stacktrace . #(struct:srcloc
> #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/debug.rkt> 362 2 15076 2612))
>   (call-with-exception-handler . #(struct:srcloc
> #<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt>
> 266 2 9251 256))
>   (fact . #(struct:srcloc #<path:/Users/sk/Desktop/client.rkt> 5 0 40 139))
>   (eval-one-top . #f)
>   (call-with-exception-handler . #(struct:srcloc
> #<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt>
> 266 2 9251 256))
>   (loop . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1210 24 50804 979))
>   (call-with-break-parameterization . #(struct:srcloc
> #<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt>
> 148 2 4909 517))
>   (#f . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1180 9 49153 5062))
>   (#f . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1493 15 64385 1548))
>   (#f . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 435 6 19067 1056))
>   (#f . #(struct:srcloc #<path:/Applications/Racket
> v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 486 32 21054 120))
>   (call-with-break-parameterization . #(struct:srcloc
> #<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt>
> 148 2 4909 517))
>   (eventspace-handler-thread-proc . #(struct:srcloc
> #<path:/Applications/Racket
> v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 370 11 16515 690))
> exception raised by error display handler: vector-ref: contract violation
>   expected: vector?
>   given: '((error 'yield "yielding computation")
> #<path:/Users/sk/Desktop/yielder.rkt> 10 4 113 37)
>   argument position: 1st
>   other arguments...:
>    0; original exception raised: yield: yielding computation
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/6aa1ad8a-9f1a-4c11-8b75-5ed3ca09797dn%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/6aa1ad8a-9f1a-4c11-8b75-5ed3ca09797dn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CADcueguC-yYNcqx13JA_zqEopn_fzUX%2BzFPq_L3NnDvgK1xMNA%40mail.gmail.com.

Reply via email to