I'm trying to make a function that can discriminate typed boxes: I
tried the following in Typed Racket:

(: ensure-number-box (Any -> (Boxof Number)))
(define (ensure-number-box x)
  (if (and (box? x) (number? (unbox x)))
      x
      (error 'ensure-number-box "~s" x)))

Unfortunately, I can't convince the type checker that x is a (Boxof
number).  I'm not quite sure how to use the occurrence typing properly
to get this to type correctly.


I want to return the original box.  That is, it's not correct for me to do this:

(: ensure-number-box (Any -> (Boxof Number)))
(define (ensure-number-box x)
  (if (box? x)
      (let ([y (unbox x)])
        (if (number? y)
            (box y)
            (error 'ensure-number-box "~s" x)))
      (error 'ensure-number-box "~s" x)))

since this generates a fresh box.
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to