What you're looking for is called bounded polymorphism. Sadly, Typed Racket
doesn't support this, so I'd try one of the options David suggests.

Sam
On Apr 25, 2014 10:46 PM, "Alexander D. Knauth" <alexan...@knauth.org>
wrote:

> That’s what I tried at first, but my actual struct is a lot more
> complicated than posn, and it kept giving be type-check errors, and trying
> to enforce the types of the fields myself just ended up with completely
> unreadable code and even more type errors, so I gave up on making it
> polymorphic, but I still wanted to be able to specify specific cases of it
> as types that would only contain that specific case of it.
>
> On Apr 25, 2014, at 10:25 PM, David Van Horn <dvanh...@cs.umd.edu> wrote:
>
> > On 4/25/14, 9:57 PM, Alexander D. Knauth wrote:
> >> But then the posn constructor doesn’t enforce that it’s arguments have
> to be Reals, and the posn? predicate doesn’t check it, and the accessors
> don’t say that they always produce Reals.
> >
> > Maybe I'm not seeing the big picture, but that's what the Posn type is
> > for.  If you apply posn to something other than reals, you won't get a
> > Posn.  If you have a Posn and apply posn-x, you get a real.
> >
> > (define: (f [p : Posn]) : Real
> >  (+ (posn-x p) (posn-y p)))
> >
> > David
> >
> >
> >> On Apr 25, 2014, at 9:49 PM, David Van Horn <dvanh...@cs.umd.edu>
> wrote:
> >>
> >>> How about this?
> >>>
> >>> (struct: (x y) posn ([x : x] [y : y]))
> >>> (define-type Posn (posn Real Real))
> >>> (define-type Origin (posn Zero Zero))
> >>>
> >>>
> >
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to