[racket-dev] typed/scheme n00b question
On Sep 7, Jay McCarthy wrote:
> 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?
I vaguely remembered that unions don't work for functions, and
therefore didn't use one (also that "?" is exactly about it.)
> > 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.
+1 to all of that. ["Why does everyone" reminds me of a teacher who
had about 112 students out of a class of 120 students fail a course --
and concluded that it was a very weak class.]
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!