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 <[email protected]>

> On Mon, Nov 28, 2011 at 10:35 AM, Ismael Figueroa Palet
> <[email protected]> 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
> [email protected]
>



-- 
Ismael
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to