diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-04-28 15:04:37 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-04-28 15:04:37 -0400 |
commit | 81138f15749d9fcd2b6056d4c4cd8c0edc5fce4b (patch) | |
tree | e4e2246dc15a7cbbf067401a21197b6fd17ea95b /src/monoize.sml | |
parent | 488033c82277ffe87f8fbd32ccd52298e0883743 (diff) |
A view query works
Diffstat (limited to 'src/monoize.sml')
-rw-r--r-- | src/monoize.sml | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/monoize.sml b/src/monoize.sml index ccc5a851..a2048a7d 100644 --- a/src/monoize.sml +++ b/src/monoize.sml @@ -2938,6 +2938,24 @@ fun monoDecl (env, fm) (all as (d, loc)) = (L'.DVal (x, n, t', e_name, s), loc)]) end | L.DTable _ => poly () + | L.DView (x, n, s, e, (L.CRecord (_, xts), _)) => + let + val t = (L.CFfi ("Basis", "string"), loc) + val t' = (L'.TFfi ("Basis", "string"), loc) + val s = "uw_" ^ s + val e_name = (L'.EPrim (Prim.String s), loc) + + val xts = map (fn (x, t) => (monoName env x, monoType env t)) xts + + val (e, fm) = monoExp (env, St.empty, fm) e + val e = (L'.EFfiApp ("Basis", "viewify", [e]), loc) + in + SOME (Env.pushENamed env x n t NONE s, + fm, + [(L'.DView (s, xts, e), loc), + (L'.DVal (x, n, t', e_name, s), loc)]) + end + | L.DView _ => poly () | L.DSequence (x, n, s) => let val t = (L.CFfi ("Basis", "string"), loc) |