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

