From 447b60afccc89ef18d8f92a260dd1fcdf735898e Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 31 Aug 2008 08:32:18 -0400 Subject: Laconic -> Ur --- tests/gformText.ur | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/gformText.ur (limited to 'tests/gformText.ur') diff --git a/tests/gformText.ur b/tests/gformText.ur new file mode 100644 index 00000000..98d0f4ee --- /dev/null +++ b/tests/gformText.ur @@ -0,0 +1,50 @@ +con stringify = fold (fn nm :: Name => fn u :: Unit => fn t :: {Type} => [nm = string] ++ t) [] + +signature S = sig + con rs :: {Unit} + val names : $(stringify rs) +end + +signature S' = sig + con rs :: {Unit} + + val handler : $(stringify rs) -> page + val page : unit -> page +end + +functor F (M : S) : S' where con rs = M.rs = struct + con rs = M.rs + + val handler = fn x : $(stringify M.rs) => + {fold [fn rs :: {Unit} => $(stringify rs) -> $(stringify rs) -> xml body [] []] + (fn nm :: Name => fn u :: Unit => fn rest :: {Unit} => + fn f : $(stringify rest) -> $(stringify rest) -> xml body [] [] => + fn names : $(stringify ([nm] ++ rest)) => + fn x : $(stringify ([nm] ++ rest)) => +
  • {cdata names.nm}: {cdata x.nm}
  • {f (names -- nm) (x -- nm)}) + (fn names => fn x => ) + [M.rs] M.names x} + + + val page = fn () => + + {fold [fn rs :: {Unit} => xml lform [] (stringify rs)] + (fn nm :: Name => fn u :: Unit => fn rest :: {Unit} => + fn frag : xml lform [] (stringify rest) => +
  • {useMore frag}
    ) + + [rs]} + + +
    + +end + +structure M = F(struct + con rs = [A, B, C] + + val names = {A = "A", B = "B", C = "C"} +end) + +open M + -- cgit v1.2.3