summaryrefslogtreecommitdiff
path: root/lib/top.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-09-13 20:04:28 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-09-13 20:04:28 -0400
commitb145e03e5e25cfd59f544312efe3ea93e265a8ce (patch)
tree63178c623e47e45b58631910c533721505226647 /lib/top.ur
parent291fe704e9a5be0a71cd03418ec5229c99910898 (diff)
Crud gets column headings
Diffstat (limited to 'lib/top.ur')
-rw-r--r--lib/top.ur19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/top.ur b/lib/top.ur
index 7c18da21..3fac43a7 100644
--- a/lib/top.ur
+++ b/lib/top.ur
@@ -8,6 +8,16 @@ fun compose (t1 ::: Type) (t2 ::: Type) (t3 ::: Type) (f1 : t2 -> t3) (f2 : t1 -
fun txt (t ::: Type) (ctx ::: {Unit}) (use ::: {Type}) (sh : show t) (v : t) = cdata (show sh v)
+fun foldTR (tf :: Type -> Type) (tr :: {Type} -> Type)
+ (f : nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+ -> tf t -> tr rest -> tr ([nm = t] ++ rest))
+ (i : tr []) =
+ fold [fn r :: {Type} => $(mapTT tf r) -> tr r]
+ (fn (nm :: Name) (t :: Type) (rest :: {Type}) (acc : _ -> tr rest) =>
+ [[nm] ~ rest] =>
+ fn r => f [nm] [t] [rest] r.nm (acc (r -- nm)))
+ (fn _ => i)
+
fun foldTR2 (tf1 :: Type -> Type) (tf2 :: Type -> Type) (tr :: {Type} -> Type)
(f : nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
-> tf1 t -> tf2 t -> tr rest -> tr ([nm = t] ++ rest))
@@ -18,6 +28,15 @@ fun foldTR2 (tf1 :: Type -> Type) (tf2 :: Type -> Type) (tr :: {Type} -> Type)
fn r1 r2 => f [nm] [t] [rest] r1.nm r2.nm (acc (r1 -- nm) (r2 -- nm)))
(fn _ _ => i)
+fun foldTRX (tf :: Type -> Type) (ctx :: {Unit})
+ (f : nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+ -> tf t -> xml ctx [] []) =
+ foldTR [tf] [fn _ => xml ctx [] []]
+ (fn (nm :: Name) (t :: Type) (rest :: {Type}) =>
+ [[nm] ~ rest] =>
+ fn r acc => <xml>{f [nm] [t] [rest] r}{acc}</xml>)
+ <xml></xml>
+
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 [] []) =