changeset 332:02d15d81ae9b

foldTRX2
author Adam Chlipala <adamc@hcoop.net>
date Sat, 13 Sep 2008 11:13:46 -0400
parents 41458a694575
children c655eddc3795
files lib/basis.urs lib/top.ur lib/top.urs tests/crud.ur
diffstat 4 files changed, 18 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lib/basis.urs	Sat Sep 13 10:44:58 2008 -0400
+++ b/lib/basis.urs	Sat Sep 13 11:13:46 2008 -0400
@@ -259,6 +259,8 @@
 con head = [Head]
 con body = [Body]
 con lform = [Body, LForm]
+con tabl = [Body, Table]
+con tr = [Body, Tr]
 
 val head : unit -> tag [] html head [] []
 val title : unit -> tag [] head [] [] []
--- a/lib/top.ur	Sat Sep 13 10:44:58 2008 -0400
+++ b/lib/top.ur	Sat Sep 13 11:13:46 2008 -0400
@@ -17,3 +17,12 @@
                         [[nm] ~ rest] =>
                         fn r1 r2 => f [nm] [t] [rest] r1.nm r2.nm (acc (r1 -- nm) (r2 -- nm)))
                 (fn _ _ => i)
+
+fun foldTRX2 (tf1 :: Type -> Type) (tf2 :: Type -> Type) (ctx :: {Unit})
+        (f : nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+                -> tf1 t -> tf2 t -> xml ctx [] []) =
+        foldTR2 [tf1] [tf2] [fn _ => xml ctx [] []]
+                (fn (nm :: Name) (t :: Type) (rest :: {Type}) =>
+                        [[nm] ~ rest] =>
+                        fn r1 r2 acc => <xml>{f [nm] [t] [rest] r1 r2}{acc}</xml>)
+                <xml></xml>
--- a/lib/top.urs	Sat Sep 13 10:44:58 2008 -0400
+++ b/lib/top.urs	Sat Sep 13 11:13:46 2008 -0400
@@ -14,3 +14,8 @@
         -> (nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
                 -> tf1 t -> tf2 t -> tr rest -> tr ([nm = t] ++ rest))
         -> tr [] -> r :: {Type} -> $(mapTT tf1 r) -> $(mapTT tf2 r) -> tr r
+
+val foldTRX2 : tf1 :: (Type -> Type) -> tf2 :: (Type -> Type) -> ctx :: {Unit}
+        -> (nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+                -> tf1 t -> tf2 t -> xml ctx [] [])
+        -> r :: {Type} -> $(mapTT tf1 r) -> $(mapTT tf2 r) -> xml ctx [] []
--- a/tests/crud.ur	Sat Sep 13 10:44:58 2008 -0400
+++ b/tests/crud.ur	Sat Sep 13 11:13:46 2008 -0400
@@ -20,15 +20,12 @@
                         {acc}
                         <tr>
                                 <td>{txt _ fs.T.Id}</td>
-                                {foldTR2 [idT] [colMeta'] [fn _ => xtr]
+                                {foldTRX2 [idT] [colMeta'] [tr]
                                         (fn (nm :: Name) (t :: Type) (rest :: {Type}) =>
                                                 [[nm] ~ rest] =>
-                                                fn v funcs acc =>
-                                                <tr>
+                                                fn v funcs => <tr>
                                                         <td>{funcs.Show v}</td>
-                                                        {acc}
                                                 </tr>)
-                                        <tr></tr>
                                         [M.cols] (fs.T -- #Id) M.cols}
                         </tr>
                 </body>) <body></body>;