aboutsummaryrefslogtreecommitdiff
path: root/src/lib/util.rs
diff options
context:
space:
mode:
authorRoy Frostig <[email protected]>2010-06-28 23:18:51 -0700
committerRoy Frostig <[email protected]>2010-06-28 23:18:51 -0700
commit023e5af6398f8892fee429759096ba8c2480ed7d (patch)
tree732480750073263707d6ce2cc43e562a7546dcf1 /src/lib/util.rs
parentAdd a NO_VALGRIND override mechanism to makefile, if you want day-to-day buil... (diff)
downloadrust-023e5af6398f8892fee429759096ba8c2480ed7d.tar.xz
rust-023e5af6398f8892fee429759096ba8c2480ed7d.zip
The few and proud isolated bits from stdlib-work so far that don't break everything. Note util.rs hasn't yet been declared mod in the std crate. Don't do that yet, as it breaks make check.
Diffstat (limited to 'src/lib/util.rs')
-rw-r--r--src/lib/util.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/util.rs b/src/lib/util.rs
new file mode 100644
index 00000000..bf57bb52
--- /dev/null
+++ b/src/lib/util.rs
@@ -0,0 +1,46 @@
+type option[T] = tag(none(), some(T));
+type box[T] = tup(@T);
+type boxo[T] = option[box[T]];
+type boxm[T] = tup(mutable @T);
+type boxmo[T] = option[boxm[T]];
+
+type map[T, U] = fn(&T) -> U;
+
+fn option_map[T, U](map[T, U] f, &option[T] opt) -> option[U] {
+ alt (opt) {
+ case (some[T](x)) {
+ ret some[U](f[T, U](x));
+ }
+ case (none[T]()) {
+ ret none[U]();
+ }
+ }
+}
+
+fn unbox[T](&box[T] b) -> T {
+ ret b._0;
+}
+
+
+fn unboxm[T](&boxm[T] b) -> T {
+ ret b._0;
+}
+
+fn unboxo[T](boxo[T] b) -> option[T] {
+ // Pending issue #90, no need to alias the function item in order to pass
+ // it as an arg.
+ let map[box[T], T] f = unbox[T];
+ be option_map[box[T], T](f, b);
+}
+
+fn unboxmo[T](boxmo[T] b) -> option[T] {
+ // Issue #90, as above
+ let map[boxm[T], T] f = unboxm[T];
+ be option_map[boxm[T], T](f, b);
+}
+
+fn id[T](T x) -> T {
+ ret x;
+}
+
+type rational = rec(int num, int den);