stdlib: Implement subst function.
[goals.git] / stdlib / prelude.gl
index f4ab20e..8315b6f 100644 (file)
@@ -38,6 +38,20 @@ tactic *exists (filename) = @{
 }
 
 #----------------------------------------------------------------------
+# Basic functions.
+
+# Wrap list of strings in a call or tactic.
+pure function wrap (wrapper, xs) = @{
+    echo '['
+    for x in %xs; do
+        echo %wrapper "( "
+        quoted_string "$x"
+        echo " ),"
+    done
+    echo ']'
+}
+
+#----------------------------------------------------------------------
 # Text functions.
 
 # Sort + uniq a list.
@@ -45,6 +59,13 @@ pure function sort (xs) returning strings = @{
     for f in %xs; do echo "$f"; done | sort -u
 }
 
+# Substitute.
+pure function subst (from, to, text) returning string = @{
+    # We need to replace any / characters in ‘to’ with escaped ones.
+    to="$( echo -n %to | sed 's,/,\\/,g' )"
+    echo %text | sed -E s/%from/$to/g
+}
+
 #----------------------------------------------------------------------
 # File functions.