Mercurial > urweb
diff src/elaborate.sml @ 176:33d4a8eea484
Case through explify
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 31 Jul 2008 16:28:55 -0400 |
parents | b2d752455182 |
children | d11754ffe252 |
line wrap: on
line diff
--- a/src/elaborate.sml Thu Jul 31 13:08:57 2008 -0400 +++ b/src/elaborate.sml Thu Jul 31 16:28:55 2008 -0400 @@ -1045,17 +1045,13 @@ val k = (L'.KType, loc) val c = (L'.CRecord (k, map (fn (x, _, t) => ((L'.CName x, loc), t)) xpts), loc) - val (flex, c) = + val c = if flex then - let - val flex = cunif (loc, (L'.KRecord k, loc)) - in - (SOME flex, (L'.CConcat (c, flex), loc)) - end + (L'.CConcat (c, cunif (loc, (L'.KRecord k, loc))), loc) else - (NONE, c) + c in - (((L'.PRecord (map (fn (x, p', _) => (x, p')) xpts, flex), loc), + (((L'.PRecord (map (fn (x, p', _) => (x, p')) xpts), loc), (L'.TRecord c, loc)), (env, bound)) end @@ -1089,8 +1085,9 @@ | L'.PPrim _ => None | L'.PCon (pc, NONE) => Datatype (IM.insert (IM.empty, pcCoverage pc, Wild)) | L'.PCon (pc, SOME p) => Datatype (IM.insert (IM.empty, pcCoverage pc, coverage p)) - | L'.PRecord (xps, _) => Record [foldl (fn ((x, p), fmap) => + | L'.PRecord xps => Record [foldl (fn ((x, p), fmap) => SM.insert (fmap, x, coverage p)) SM.empty xps] + fun merge (c1, c2) = case (c1, c2) of (None, _) => c2