[racket] typed racket: equivalent to Any for function types?
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>