Mercurial > urweb
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 |