summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ur/basis.urs1
-rw-r--r--lib/ur/string.ur18
-rw-r--r--lib/ur/string.urs4
3 files changed, 21 insertions, 2 deletions
diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs
index 727f2e39..0b22544f 100644
--- a/lib/ur/basis.urs
+++ b/lib/ur/basis.urs
@@ -857,5 +857,6 @@ val mayUpdate : fs ::: {Type} -> tables ::: {{Type}} -> [[Old, New] ~ tables]
val also : sql_policy -> sql_policy -> sql_policy
val debug : string -> transaction unit
+val naughtyDebug : string -> int
val rand : transaction int
diff --git a/lib/ur/string.ur b/lib/ur/string.ur
index 235e5939..a93f7a57 100644
--- a/lib/ur/string.ur
+++ b/lib/ur/string.ur
@@ -24,17 +24,31 @@ fun mindex {Haystack = s, Needle = chs} =
fun substring s {Start = start, Len = len} = Basis.substring s start len
+fun seek s ch =
+ case index s ch of
+ None => None
+ | Some i => Some (suffix s (i + 1))
+fun mseek {Haystack = s, Needle = chs} =
+ case mindex {Haystack = s, Needle = chs} of
+ None => None
+ | Some i => Some (sub s i, suffix s (i + 1))
+
fun split s ch =
case index s ch of
None => None
| Some i => Some (substring s {Start = 0, Len = i},
- substring s {Start = i + 1, Len = length s - i - 1})
+ suffix s (i + 1))
+fun split' s ch =
+ case index s ch of
+ None => None
+ | Some i => Some (substring s {Start = 0, Len = i},
+ suffix s i)
fun msplit {Haystack = s, Needle = chs} =
case mindex {Haystack = s, Needle = chs} of
None => None
| Some i => Some (substring s {Start = 0, Len = i},
sub s i,
- substring s {Start = i + 1, Len = length s - i - 1})
+ suffix s (i + 1))
fun all f s =
let
diff --git a/lib/ur/string.urs b/lib/ur/string.urs
index 52aa27b6..55133578 100644
--- a/lib/ur/string.urs
+++ b/lib/ur/string.urs
@@ -17,7 +17,11 @@ val mindex : {Haystack : t, Needle : t} -> option int
val substring : t -> {Start : int, Len : int} -> string
+val seek : t -> char -> option string
+val mseek : {Haystack : t, Needle : t} -> option (char * string)
+
val split : t -> char -> option (string * string)
+val split' : t -> char -> option (string * string) (* The matched character is kept at the beginning of the suffix. *)
val msplit : {Haystack : t, Needle : t} -> option (string * char * string)
val all : (char -> bool) -> string -> bool