[racket] typed racket: equivalent to Any for function types?

From: Ismael Figueroa Palet (ifigueroap at gmail.com)
Date: Mon Nov 28 11:05:02 EST 2011

Now my example typechecks, but effectively I can't do anything with the
function :-( so it is very unpractical

(: f ((Nothing -> Any) -> True))
(define (f g) #t)
(f (lambda: ([x : Integer]) #t))

is there any way to make the typechecker happy, but being able to apply
functions?

For me, it would be something like:

(: f ((Bottom -> True) -> True))
(define (f g) (g 1))
(f (lambda: ([x : Integer]) #t))

?? or any other workaround?
should I instead use an untyped module?

Thanks


2011/11/28 Sam Tobin-Hochstadt <samth at ccs.neu.edu>

> On Mon, Nov 28, 2011 at 10:35 AM, Ismael Figueroa Palet
> <ifigueroap at gmail.com> wrote:
> > As Any is supertype of all values, what is the equivalent type for
> function
> > types?
> >
> > (Any -> Any) does not work because of the contra-variant requirement of
> the
> > argument.
> >
> > (: f ((Any -> Any) -> True))
> > (define (f g) #t)
> >
> > (f (lambda (x) x) #t) ;; works
> > (f (lambda: ([x : Integer]) #f)) ;; does not work
> >
> > The error is:
> >
> > Type Checker: Expected (Any -> Any), but got (Integer -> Any) in:
> (lambda:
> > ((x : Integer)) #f)
> >
> > If I understand it correctly, the type I'm looking for is (Bottom ->
> Any),
> > which satisfies the contra-variant and variant requirements for function
> > subtyping. However, the Bottom type doesn't seem to exist (at least at
> the
> > user-level, because I remember seeing some error messages that mentioned
> Top
> > and Bottom).
>
> You're probably looking for the type `Nothing'.  Note that functions
> of type `(Nothing -> T)' are very hard to apply, though.
>
> --
> sam th
> samth at ccs.neu.edu
>



-- 
Ismael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20111128/142f61a4/attachment.html>

Posted on the users mailing list.