Since S0 is a function from T :: Type to some Union and TR doesn't allow this, you want to signal a syntax error here. Correct?
On Nov 1, 2012, at 12:16 PM, Sam Tobin-Hochstadt wrote: > On Thu, Nov 1, 2012 at 12:07 PM, Ray Racine <ray.rac...@gmail.com> wrote: >> Fresh build from Racket git MASTER, the following causes DRRacket's Check >> Syntax to loop without termination. > > Clearly, this isn't the behavior you want, but I don't think a > contract is possible to generate for this code. > > If you change the type of the S2-x field to `(S0 T)`, then it works. > That might even have been what you wanted. > >> >> #lang typed/racket/base >> >> (provide f) >> >> (struct: (T) S1 ([x : (Listof String)])) >> >> (struct: (T) S2 ([x : S0] >> [g : (T -> Boolean)])) >> >> (define-type (S0 T) (U (S1 T) (S2 T))) >> >> (: f (String -> (S0 String))) >> (define (f x) >> (S1 '())) >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> > > > > -- > sam th > sa...@ccs.neu.edu > ____________________ > Racket Users list: > http://lists.racket-lang.org/users
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users