aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/ur/list.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-12-05 14:01:34 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-12-05 14:01:34 -0500
commit20fe6fd5bb27486a7f3483ead05061e967c5a105 (patch)
tree27acc16bb8d3b12293fbbae8b833d7ff2e731aa9 /lib/ur/list.ur
parent7bfb616805a8c693aeb94067faf1098a0b50cbe5 (diff)
Represent FFI function names as strings, to deal with cross-file recursion
Diffstat (limited to 'lib/ur/list.ur')
-rw-r--r--lib/ur/list.ur24
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/ur/list.ur b/lib/ur/list.ur
index 58f9e23e..3abd8b97 100644
--- a/lib/ur/list.ur
+++ b/lib/ur/list.ur
@@ -21,7 +21,7 @@ val eq = fn [a] (_ : eq a) =>
mkEq eq'
end
-fun foldl [a] [b] f =
+fun foldl [a] [b] (f : a -> b -> b) =
let
fun foldl' acc ls =
case ls of
@@ -31,6 +31,18 @@ fun foldl [a] [b] f =
foldl'
end
+val rev = fn [a] =>
+ let
+ fun rev' acc (ls : list a) =
+ case ls of
+ [] => acc
+ | x :: ls => rev' (x :: acc) ls
+ in
+ rev' []
+ end
+
+fun foldr [a] [b] f (acc : b) (ls : list a) = foldl f acc (rev ls)
+
fun foldlAbort [a] [b] f =
let
fun foldlAbort' acc ls =
@@ -54,16 +66,6 @@ val length = fn [a] =>
length' 0
end
-val rev = fn [a] =>
- let
- fun rev' acc (ls : list a) =
- case ls of
- [] => acc
- | x :: ls => rev' (x :: acc) ls
- in
- rev' []
- end
-
fun foldlMapAbort [a] [b] [c] f =
let
fun foldlMapAbort' ls' acc ls =