Since secs and and fail-thunk are optional, we need to use case lambda for writhing the type.
(require/typed racket/base [file-or-directory-modify-seconds (case-lambda [String -> (U Integer Void exn:fail:filesystem)] [String (-> exn:fail:filesystem) -> (U Integer Void exn:fail:filesystem)] [String (Option Integer) (-> exn:fail:filesystem) -> (U Integer Void exn:fail:filesystem)])]) * If we do not have exn:fail:filesystem, it will raise a contract-broken error when fail-thunk raises an exception. So I added exn:fail:filesystem. So how can I have the exception and not the contract error? Hari ----- Original Message ----- From: "Shriram Krishnamurthi" <s...@cs.brown.edu> To: "Sam Tobin-Hochstadt" <sa...@ccs.neu.edu> Cc: "Hari Prashanth" <krh...@ccs.neu.edu>, "plt-dev Developers" <d...@lists.racket-lang.org> Sent: Sunday, September 5, 2010 9:59:32 AM GMT -05:00 US/Canada Eastern Subject: Re: [racket-dev] typed/scheme n00b question Can you tell us (om the list) what the true type is? I'm sure I'm not the only one curious as to precisely what it is and how you would write it w/ the exception. Thanks. Shriram On Sun, Sep 5, 2010 at 8:57 AM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> wrote: > On Sun, Sep 5, 2010 at 3:06 AM, Hari Prashanth <krh...@ccs.neu.edu> wrote: >> Is this what you are looking for? >> >> (require/typed racket/base >> [file-or-directory-modify-seconds >> (String (Option Integer) (-> exn:fail:filesystem) -> (U >> Integer Void))]) > > Hari is correct that you can use `require/typed' on `racket/base'. > However, that type isn't quite right - it shouldn't *return* > `exn:fail:filesystem' - that is an exception that might be raised. > > The true type is more complex; I'll add it to the base environment. > -- > sam th > sa...@ccs.neu.edu > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/dev > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev