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

Reply via email to