[racket-dev] typed/scheme n00b question
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