From 42944f71120301ea2dff0e93f3a0f2e7df4a44b0 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 11 Sep 2008 18:32:41 -0400 Subject: Crud list works --- tests/crud.ur | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'tests/crud.ur') diff --git a/tests/crud.ur b/tests/crud.ur index 101b1ba4..6bbcbe1f 100644 --- a/tests/crud.ur +++ b/tests/crud.ur @@ -1,3 +1,5 @@ +con colMeta = fn cols :: {Type} => $(Top.mapTT (fn t => {Show : t -> xbody}) cols) + functor Make(M : sig con cols :: {Type} constraint [Id] ~ cols @@ -5,7 +7,7 @@ functor Make(M : sig val title : string - val cols : $(mapTT (fn t => {Show : t -> xbody}) cols) + val cols : $(Top.mapTT (fn t => {Show : t -> xbody}) cols) end) = struct open constraints M @@ -14,7 +16,20 @@ val tab = M.tab fun list () = rows <- query (SELECT * FROM tab AS T) (fn fs acc => return - {acc} {txt _ fs.T.Id} + {acc} + + {txt _ fs.T.Id} + {fold [fn cols :: {Type} => $cols -> colMeta cols -> xtr] + (fn (nm :: Name) (t :: Type) (rest :: {Type}) acc => + [[nm] ~ rest] => + fn (r : $([nm = t] ++ rest)) cols => + + {cols.nm.Show r.nm} + {acc (r -- nm) (cols -- nm)} + ) + (fn _ _ => ) + [M.cols] (fs.T -- #Id) M.cols} + ) ; return List -- cgit v1.2.3