+# Filter a list by regexp.
+pure function filter (pat, xs) returning strings = @{
+ for f in %xs; do echo "$f"; done | grep -E -- %pat
+}
+
+# Filter out a list by regexp.
+pure function filter-out (pat, xs) returning strings = @{
+ for f in %xs; do echo "$f"; done | grep -v -E -- %pat
+}
+
+# Head of a list.
+pure function head (xs) returning string = @{
+ for f in %xs; do
+ echo "$f"
+ exit 0
+ done
+}
+
+# Join two lists.
+pure function join (xs, ys) returning strings = @{
+ for f in %xs %ys; do echo "$f"; done
+}
+
+# Last element of a list.
+pure function last (xs) returning string = @{
+ for f in %xs; do
+ r="$f"
+ done
+ echo "$r"
+}
+
+# n'th element of a list.
+pure function nth (n, xs) returning string = @{
+ i=0
+ r=
+ for f in %xs; do
+ if [ $i -eq %n ]; then r="$f"; fi
+ ((++i))
+ done
+ echo "$r"
+}
+