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

Reply via email to