[racket] Typed Racket struct with more permissive constructor

From: Neil Toronto (neil.toronto at gmail.com)
Date: Thu May 31 11:42:07 EDT 2012

Currently, the floating-point bitmap type is defined so that its size 
fields are Integer, and a guard assures that they're really 
Nonnegative-Fixnum:

(struct: flomap ([values : FlVector]
                  [components : Integer]
                  [width : Integer]
                  [height : Integer])
   #:transparent
   #:guard
   (λ (vs c w h name)
     (with-asserts ([c  nonnegative-fixnum?]
                    [w  nonnegative-fixnum?]
                    [h  nonnegative-fixnum?])
       [...] ; elided length check on vs
       (values vs c w h))))


What I'd *really* like, though, is to have the fields be 
Nonnegative-Fixnum in the first place, and simply have a more permissive 
constructor. Is there a way to do that? As it is, `flomap-components' 
always returns an Integer, but no flomap instance can actually have an 
integer-valued `components' field.

Neil ⊥


Posted on the users mailing list.