On Wed, May 25, 2011 at 1:43 PM, John Clements <cleme...@brinckerhoff.org> wrote: > I see that typed racket doesn't signal an error on a match that doesn't have > clauses for all possible inputs, which is entirely reasonable; since that > will signal an error, that code should typecheck fine. > > However, I might *want* typed racket to check that for me. I managed to come > up with this grozzz hack: > > (: g ((U Number False) -> Number)) > (define (g x) > (cond [(number? x) (+ x 4)] > [(false? x) 13] > ;; type of x is now uninhabitable, so no typechecking error > [else (begin (string-append x "abc") (error 'foo))])) > > In this case, when I comment out the 'false?' clause, the bogus clause > suddenly is type-checked (because x's type is no longer the empty union), and > I get an error. > > So... I can get what I want, but in a very icky way. Is there a different > and more elegant way to force typed racket to check that I'm not failing to > match?
I've thought about adding a (fail-to-typecheck) form, but haven't yet. Unfortunately, coverage checking isn't always perfect, so that programming style can become painful in Typed Racket. -- sam th sa...@ccs.neu.edu _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev