[racket-dev] typed/scheme n00b question

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Tue Sep 7 08:04:05 EDT 2010

On Tue, Sep 7, 2010 at 5:54 AM, Sam Tobin-Hochstadt <samth at ccs.neu.edu> wrote:
> 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'.

There is something to be said for making the things that everyone
writes first be the thing they should write. It is natural to me to
think of a function with multiple arrow types as a union of some arrow
types. Would it be so hard for Typed Racket to see a union of all
arrows and just consider that the same as case-lambda? Is that wrong?
If it is fundamentally wrong, some better form of explanation in the
docs seem warranted.

Jay

>
> 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
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/dev
>



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://teammccarthy.org/jay

"The glory of God is Intelligence" - D&C 93


Posted on the dev mailing list.