comparison src/mono_reduce.sml @ 1298:e665527fce1c

Support empty datatypes, which can now be generated via 'variant []'
author Adam Chlipala <adam@chlipala.net>
date Thu, 09 Sep 2010 12:42:25 -0400
parents acabf3935060
children 02fc16faecf3
comparison
equal deleted inserted replaced
1297:41484478a32d 1298:e665527fce1c
434 | ECase (e, pes, _) => 434 | ECase (e, pes, _) =>
435 let 435 let
436 val lss = map (fn (p, e) => summarize (d + patBinds p) e) pes 436 val lss = map (fn (p, e) => summarize (d + patBinds p) e) pes
437 in 437 in
438 case lss of 438 case lss of
439 [] => raise Fail "Empty pattern match" 439 [] => summarize d e
440 | ls :: lss => 440 | ls :: lss =>
441 summarize d e 441 summarize d e
442 @ (if List.all (fn ls' => ls' = ls) lss then 442 @ (if List.all (fn ls' => ls' = ls) lss then
443 ls 443 ls
444 else if length (List.filter (not o List.null) (ls :: lss)) <= 1 then 444 else if length (List.filter (not o List.null) (ls :: lss)) <= 1 then