diff tests/crud.ur @ 369:226c977faa9c

Crud indented properly, except for <xml>...</xml> outside parens and sig/struct
author Adam Chlipala <adamc@hcoop.net>
date Thu, 16 Oct 2008 14:40:28 -0400
parents b6be16792584
children 4f75cc2e1373
line wrap: on
line diff
--- a/tests/crud.ur	Thu Oct 16 14:17:55 2008 -0400
+++ b/tests/crud.ur	Thu Oct 16 14:40:28 2008 -0400
@@ -1,11 +1,11 @@
 con colMeta = fn t_formT :: (Type * Type) => {
-        Nam : string,
-        Show : t_formT.1 -> xbody,
-        Widget : nm :: Name -> xml form [] [nm = t_formT.2],
-        WidgetPopulated : nm :: Name -> t_formT.1 -> xml form [] [nm = t_formT.2],
-        Parse : t_formT.2 -> t_formT.1,
-        Inject : sql_injectable t_formT.1
-}
+                 Nam : string,
+                 Show : t_formT.1 -> xbody,
+                 Widget : nm :: Name -> xml form [] [nm = t_formT.2],
+                 WidgetPopulated : nm :: Name -> t_formT.1 -> xml form [] [nm = t_formT.2],
+                 Parse : t_formT.2 -> t_formT.1,
+                 Inject : sql_injectable t_formT.1
+                 }
 con colsMeta = fn cols :: {(Type * Type)} => $(Top.mapT2T colMeta cols)
 
 fun default (t ::: Type) (sh : show t) (rd : read t) (inj : sql_injectable t)
@@ -15,7 +15,7 @@
      Widget = fn nm :: Name => (<xml><textbox{nm}/></xml>),
      WidgetPopulated = fn (nm :: Name) n =>
                           (<xml><textbox{nm} value={show _ n}/></xml>),
-     Parse = readError _,e
+     Parse = readError _,
      Inject = _}
 
 val int = default _ _ _
@@ -31,14 +31,14 @@
                  Inject = _}
 
 functor Make(M : sig
-        con cols :: {(Type * Type)}
-        constraint [Id] ~ cols
-        val tab : sql_table ([Id = int] ++ mapT2T fstTT cols)
+con cols :: {(Type * Type)}
+constraint [Id] ~ cols
+val tab : sql_table ([Id = int] ++ mapT2T fstTT cols)
 
-        val title : string
+val title : string
 
-        val cols : colsMeta cols
-end) = struct
+val cols : colsMeta cols
+             end) = struct
 
 open constraints M
 val tab = M.tab
@@ -64,10 +64,13 @@
     () <- dml (update [mapT2T fstTT M.cols]
                       (foldT2R2 [sndTT] [colMeta]
                                 [fn cols => $(mapT2T (fn t :: (Type * Type) =>
-                                                         sql_exp [T = [Id = int] ++ mapT2T fstTT M.cols] [] [] t.1) cols)]
+                                                         sql_exp [T = [Id = int]
+                                                                          ++ mapT2T fstTT M.cols]
+                                                                 [] [] t.1) cols)]
                                 (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
                                                  [[nm] ~ rest] =>
-                                 fn input col acc => acc with nm = sql_inject col.Inject (col.Parse input))
+                                 fn input col acc => acc with nm =
+                                                              sql_inject col.Inject (col.Parse input))
                                 {} [M.cols] inputs M.cols)
                       tab (WHERE T.Id = {id}));
     return <xml><body>
@@ -79,18 +82,18 @@
     case fso : (Basis.option {Tab : $(mapT2T fstTT M.cols)}) of
         None => return <xml><body>Not found!</body></xml>
       | Some fs => return <xml><body><form>
-          {foldT2R2 [fstTT] [colMeta] [fn cols :: {(Type * Type)} => xml form [] (mapT2T sndTT cols)]
-                    (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
-                                     [[nm] ~ rest] (v : t.1) (col : colMeta t)
-                                     (acc : xml form [] (mapT2T sndTT rest)) =>
-                        <xml>
-                          <li> {cdata col.Nam}: {col.WidgetPopulated [nm] v}</li>
-                          {useMore acc}
-                          </xml>)
-                    <xml/>
-                    [M.cols] fs.Tab M.cols}
+        {foldT2R2 [fstTT] [colMeta] [fn cols :: {(Type * Type)} => xml form [] (mapT2T sndTT cols)]
+                  (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
+                                   [[nm] ~ rest] (v : t.1) (col : colMeta t)
+                                   (acc : xml form [] (mapT2T sndTT rest)) =>
+                      <xml>
+                        <li> {cdata col.Nam}: {col.WidgetPopulated [nm] v}</li>
+                        {useMore acc}
+                      </xml>)
+                  <xml/>
+                  [M.cols] fs.Tab M.cols}
 
-                    <submit action={save id}/>
+        <submit action={save id}/>
       </form></body></xml>
 
 fun delete (id : int) =
@@ -100,59 +103,61 @@
     </body></xml>
 
 fun confirm (id : int) = return <xml><body>
-    <p>Are you sure you want to delete ID #{txt _ id}?</p>
+  <p>Are you sure you want to delete ID #{txt _ id}?</p>
 
-    <p><a link={delete id}>I was born sure!</a></p>
+  <p><a link={delete id}>I was born sure!</a></p>
 </body></xml>
 
 fun main () =
     rows <- queryX (SELECT * FROM tab AS T)
                    (fn (fs : {T : $([Id = int] ++ mapT2T fstTT M.cols)}) => <xml>
-                       <tr>
-                         <td>{txt _ fs.T.Id}</td>
-                         {foldT2RX2 [fstTT] [colMeta] [tr]
-                                    (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
-                                                     [[nm] ~ rest] v col => <xml>
-                                                         <td>{col.Show v}</td>
-                                                       </xml>)
-                                    [M.cols] (fs.T -- #Id) M.cols}
-                         <td><a link={update fs.T.Id}>[Update]</a> <a link={confirm fs.T.Id}>[Delete]</a></td>
-                       </tr>
-                     </xml>);
+                     <tr>
+                       <td>{txt _ fs.T.Id}</td>
+                       {foldT2RX2 [fstTT] [colMeta] [tr]
+                                  (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
+                                                   [[nm] ~ rest] v col => <xml>
+                                                     <td>{col.Show v}</td>
+                                                   </xml>)
+                                  [M.cols] (fs.T -- #Id) M.cols}
+                       <td>
+                         <a link={update fs.T.Id}>[Update]</a>
+                         <a link={confirm fs.T.Id}>[Delete]</a>
+                       </td>
+                     </tr>
+                   </xml>);
     return <xml><head>
       <title>{cdata M.title}</title>
-
     </head><body>
 
-    <h1>{cdata M.title}</h1>
+      <h1>{cdata M.title}</h1>
 
-    <table border={1}>
-      <tr>
-        <th>ID</th>
-        {foldT2RX [colMeta] [tr]
-                  (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
-                                   [[nm] ~ rest] col => <xml>
+      <table border={1}>
+        <tr>
+          <th>ID</th>
+          {foldT2RX [colMeta] [tr]
+                    (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
+                                     [[nm] ~ rest] col => <xml>
                                        <th>{cdata col.Nam}</th>
                                      </xml>)
-                  [M.cols] M.cols}
-      </tr>
-      {rows}
-    </table>
+                    [M.cols] M.cols}
+        </tr>
+        {rows}
+      </table>
 
-    <br/>
+      <br/>
 
-    <form>
-      {foldT2R [colMeta] [fn cols :: {(Type * Type)} => xml form [] (mapT2T sndTT cols)]
-               (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
-                                [[nm] ~ rest] (col : colMeta t) (acc : xml form [] (mapT2T sndTT rest)) => <xml>
+      <form>
+        {foldT2R [colMeta] [fn cols :: {(Type * Type)} => xml form [] (mapT2T sndTT cols)]
+                 (fn (nm :: Name) (t :: (Type * Type)) (rest :: {(Type * Type)})
+                                  [[nm] ~ rest] (col : colMeta t) (acc : xml form [] (mapT2T sndTT rest)) => <xml>
                                     <li> {cdata col.Nam}: {col.Widget [nm]}</li>
                                     {useMore acc}
                                   </xml>)
-       <xml/>
-           [M.cols] M.cols}
-
-           <submit action={create}/>
-    </form>
+                 <xml/>
+                 [M.cols] M.cols}
+        
+        <submit action={create}/>
+      </form>
     </body></xml>
 
 end