[racket] testing impure stuff

From: Manfred Lotz (manfred.lotz at arcor.de)
Date: Mon Dec 23 15:43:11 EST 2013

On Mon, 23 Dec 2013 15:20:32 -0500
Matthias Felleisen <matthias at ccs.neu.edu>
wrote:

> 
> For that, you will need to wrap the whole loop because
> (in-directory ...) fails, and no, I don't know how to resume this
> optimized loop: 
> 
> #lang racket ;; foo.rkt 
> 
> (define start-dir ".")
> 
> ;;
> (with-handlers (((lambda (x) #t) (lambda (e) (log-warning
> "in-directory failed")))) (for ([f (in-directory start-dir)] #:when
> (regexp-match #rx"\\.rkt" f)) (with-handlers ((exn:fail:contract?
> (lambda (e) (log-warning (exn-message e)))) (exn? displayln))
>       (displayln (path->string f)))))
> 
> 

Yes, I get the message 
   in-directory failed
now.


However, if there is no way to resume a failure of in-directory then
the function isn't usable. It is a "Schönwetter-Funktion" I would say
in German.

Then I need to build my own 'in-directory' by using directory-list and
checking permissions which isn't really efficient.

BTW, I saw also 'call-with-exception-handler'. Is it more capable than
'with-handlers'?



-- 
Manfred



> 
> On Dec 23, 2013, at 3:06 PM, Manfred Lotz
> <manfred.lotz at arcor.de> wrote:
> 
> > #lang racket ;; foo.rkt 
> > 
> > (define start-dir "/tmp/testdir")
> > 
> > (for ([f (in-directory start-dir)] #:when (regexp-match #rx"\\.rkt"
> > f)) (with-handlers ((exn:fail:contract? (lambda (e) (log-warning
> >            (exn-message e))))) 
> >  (displayln (path->string f))))
> 
> 
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
> 





Posted on the users mailing list.