summaryrefslogtreecommitdiff
path: root/lib
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
parent291fe704e9a5be0a71cd03418ec5229c99910898 (diff)
Crud gets column headings
Diffstat (limited to 'lib')
-rw-r--r--lib/top.ur19
-rw-r--r--lib/top.urs10
2 files changed, 29 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 [] []) =
diff --git a/lib/top.urs b/lib/top.urs
index b124caa2..8fb6e480 100644
--- a/lib/top.urs
+++ b/lib/top.urs
@@ -10,11 +10,21 @@ val compose : t1 ::: Type -> t2 ::: Type -> t3 ::: Type
val txt : t ::: Type -> ctx ::: {Unit} -> use ::: {Type} -> show t -> t
-> xml ctx use []
+val foldTR : tf :: (Type -> Type) -> tr :: ({Type} -> Type)
+ -> (nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+ -> tf t -> tr rest -> tr ([nm = t] ++ rest))
+ -> tr [] -> r :: {Type} -> $(mapTT tf r) -> tr r
+
val foldTR2 : tf1 :: (Type -> Type) -> tf2 :: (Type -> Type) -> tr :: ({Type} -> Type)
-> (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 foldTRX : tf :: (Type -> Type) -> ctx :: {Unit}
+ -> (nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
+ -> tf t -> xml ctx [] [])
+ -> r :: {Type} -> $(mapTT tf r) -> xml ctx [] []
+
val foldTRX2 : tf1 :: (Type -> Type) -> tf2 :: (Type -> Type) -> ctx :: {Unit}
-> (nm :: Name -> t :: Type -> rest :: {Type} -> [nm] ~ rest
-> tf1 t -> tf2 t -> xml ctx [] [])