[racket-dev] typed/scheme n00b question

From: Sam Tobin-Hochstadt (samth at ccs.neu.edu)
Date: Tue Sep 7 07:54:32 EDT 2010

On Mon, Sep 6, 2010 at 10:28 PM, Eli Barzilay <eli at barzilay.org> wrote:
> On Sep  6, Sam Tobin-Hochstadt wrote:
>> On Sun, Sep 5, 2010 at 5:30 PM, Eli Barzilay <eli at barzilay.org> wrote:
>> >
>> > I think that this is the type for `file-or-directory-modify-seconds':
>> >
>> >  (case-lambda
>> >    [String -> Exact-Nonnegative-Integer]
>> >    [String (Option Exact-Nonnegative-Integer)
>> >            -> (U Exact-Nonnegative-Integer Void)]
>> >    [String (Option Exact-Nonnegative-Integer) (-> Any)
>> >            -> Any])
>>
>> Probably you want something more specific that handles the [String
>> Integer] and [String False] cases separately.
>
> Yeah, but that's the part that I can never remember.  This:
>
>  (U (String -> Exact-Nonnegative-Integer)
>     (String False -> Exact-Nonnegative-Integer)
>     (String Exact-Nonnegative-Integer -> Void)
>     (String (Option Exact-Nonnegative-Integer) (-> Any) -> Any))
>
> is more precise, but IIRC, it's not equivalent to the above -- ?

Why does everyone always want to use union for this?  Everything you
wrote there is correct, except that `U' should be `case-lambda'.

You can't use that type in `require/typed', though, since the contract
library doesn't accept `case->' contracts like that.
-- 
sam th
samth at ccs.neu.edu


Posted on the dev mailing list.