[racket] testing impure stuff

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Mon Dec 23 16:44:03 EST 2013

Sadly, I think you may have to re-implement in-directory (with a recursive 
traversal like the one in for.rkt) but use file-or-directory-permission
before you try to go into a subdirectory. -- Matthias



On Dec 23, 2013, at 4:09 PM, Manfred Lotz <manfred.lotz at arcor.de> wrote:

> I had a look into collects/racket/private/for.rkt where in-directory is
> defined.
> 
> I have to admit that I don't understand much of the stuff as this is a
> level of Racket I haven't yet mastered.
> 
> Nevertheless, there is 
>       (when (directory-exists? fp)
>          (loop fp p)))))
> 
> Here it should be checked if there is permission to read fp. Not quite
> sure what is the best way to handle it. Issue an error message and
> continue, or let the issuer of in-directory decide what to do. 
> 
> In my case I copied the stuff into my own source, renamed it, checked
> permissions and issue a message if there is no permission to read and
> continue. Seems to be the solution for me for the time being.
> 
> 
> 
> -- 
> Manfred
> 
> 
> 
> 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)))))
>> 
>> 
>> 
>> 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
>> 
> 
> 
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users


Posted on the users mailing list.