Equations
- List.asString s = { data := s }
Instances For
Equations
- String.instOfNatPos = { ofNat := { byteIdx := 0 } }
Equations
- String.instLTString = { lt := fun (s₁ s₂ : String) => s₁.data < s₂.data }
Equations
- String.decLt s₁ s₂ = List.hasDecidableLt s₁.data s₂.data
Equations
- String.length x = match x with | { data := s } => List.length s
Instances For
The internal implementation uses dynamic arrays and will perform destructive updates if the String is not shared.
Equations
- String.push x✝ x = match x✝, x with | { data := s }, c => { data := s ++ [c] }
Instances For
The internal implementation uses dynamic arrays and will perform destructive updates if the String is not shared.
Equations
- String.append x✝ x = match x✝, x with | { data := a }, { data := b } => { data := a ++ b }
Instances For
O(n) in the runtime, where n is the length of the String
Equations
- String.toList s = s.data
Instances For
Equations
- String.utf8GetAux [] x✝ x = default
- String.utf8GetAux (c :: cs) x✝ x = if x✝ = x then c else String.utf8GetAux cs (x✝ + c) x
Instances For
Return character at position p
. If p
is not a valid position
returns (default : Char)
.
See utf8GetAux
for the reference implementation.
Equations
- String.get s p = match s with | { data := s } => String.utf8GetAux s 0 p
Instances For
Equations
- String.utf8GetAux? [] x✝ x = none
- String.utf8GetAux? (c :: cs) x✝ x = if x✝ = x then some c else String.utf8GetAux? cs (x✝ + c) x
Instances For
Equations
- String.get? x✝ x = match x✝, x with | { data := s }, p => String.utf8GetAux? s 0 p
Instances For
Similar to get
, but produces a panic error message if p
is not a valid String.Pos
.
Equations
- String.get! s p = match s with | { data := s } => String.utf8GetAux s 0 p
Instances For
Equations
- String.utf8SetAux c' [] x✝ x = []
- String.utf8SetAux c' (c :: cs) x✝ x = if x✝ = x then c' :: cs else c :: String.utf8SetAux c' cs (x✝ + c) x
Instances For
Equations
- String.set x✝¹ x✝ x = match x✝¹, x✝, x with | { data := s }, i, c => { data := String.utf8SetAux c s 0 i }
Instances For
Equations
- String.modify s i f = String.set s i (f (String.get s i))
Instances For
Equations
- String.next s p = let c := String.get s p; p + c
Instances For
Equations
- String.utf8PrevAux [] x✝ x = 0
- String.utf8PrevAux (c :: cs) x✝ x = let i' := x✝ + c; if i' = x then x✝ else String.utf8PrevAux cs i' x
Instances For
Equations
- String.prev x✝ x = match x✝, x with | { data := s }, p => if p = 0 then 0 else String.utf8PrevAux s 0 p
Instances For
Equations
- String.back s = String.get s (String.prev s (String.endPos s))
Instances For
Equations
- String.atEnd x✝ x = match x✝, x with | s, p => decide (p.byteIdx ≥ String.utf8ByteSize s)
Instances For
Similar to get
but runtime does not perform bounds check.
Equations
- String.get' s p h = match s, h with | { data := s }, h => String.utf8GetAux s 0 p
Instances For
Similar to next
but runtime does not perform bounds check.
Equations
- String.next' s p h = let c := String.get s p; p + c
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.revPosOf s c = String.revPosOfAux s c (String.endPos s)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.revFind s p = String.revFindAux s p (String.endPos s)
Instances For
Equations
- String.Pos.min p₁ p₂ = { byteIdx := Nat.min p₁.byteIdx p₂.byteIdx }
Instances For
Returns the first position where the two strings differ.
Equations
- String.firstDiffPos a b = let stopPos := String.Pos.min (String.endPos a) (String.endPos b); String.firstDiffPos.loop a b stopPos 0
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.extract x✝¹ x✝ x = match x✝¹, x✝, x with | { data := s }, b, e => if b.byteIdx ≥ e.byteIdx then "" else { data := String.extract.go₁ s 0 b e }
Instances For
Equations
- String.extract.go₁ [] x✝¹ x✝ x = []
- String.extract.go₁ (c :: cs) x✝¹ x✝ x = if x✝¹ = x✝ then String.extract.go₂ (c :: cs) x✝¹ x else String.extract.go₁ cs (x✝¹ + c) x✝ x
Instances For
Equations
- String.extract.go₂ [] x✝ x = []
- String.extract.go₂ (c :: cs) x✝ x = if x✝ = x then [] else c :: String.extract.go₂ cs (x✝ + c) x
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.splitOn s sep = if (sep == "") = true then [s] else String.splitOnAux s sep 0 0 0 []
Instances For
Equations
- String.instInhabitedString = { default := "" }
Equations
- String.instAppendString = { append := String.append }
Equations
- String.pushn s c n = Nat.repeat (fun (s : String) => String.push s c) n s
Instances For
Equations
- String.isEmpty s = (String.endPos s == 0)
Instances For
Equations
- String.join l = List.foldl (fun (r s : String) => r ++ s) "" l
Instances For
Equations
- String.singleton c = String.push "" c
Instances For
Equations
- String.intercalate s x = match x with | [] => "" | a :: as => String.intercalate.go a s as
Instances For
Equations
- String.intercalate.go acc s (a :: as) = String.intercalate.go (acc ++ s ++ a) s as
- String.intercalate.go acc s [] = acc
Instances For
Iterator for String
. That is, a String
and a position in that string.
- s : String
- i : String.Pos
Instances For
Equations
- String.mkIterator s = { s := s, i := 0 }
Instances For
Equations
Instances For
Equations
- String.instSizeOfIterator = { sizeOf := fun (i : String.Iterator) => String.utf8ByteSize i.s - i.i.byteIdx }
Equations
- String.Iterator.toString x = match x with | { s := s, i := i } => s
Instances For
Equations
- String.Iterator.remainingBytes x = match x with | { s := s, i := i } => (String.endPos s).byteIdx - i.byteIdx
Instances For
Equations
- String.Iterator.pos x = match x with | { s := s, i := i } => i
Instances For
Equations
- String.Iterator.curr x = match x with | { s := s, i := i } => String.get s i
Instances For
Equations
- String.Iterator.next x = match x with | { s := s, i := i } => { s := s, i := String.next s i }
Instances For
Equations
- String.Iterator.prev x = match x with | { s := s, i := i } => { s := s, i := String.prev s i }
Instances For
Equations
- String.Iterator.atEnd x = match x with | { s := s, i := i } => decide (i.byteIdx ≥ (String.endPos s).byteIdx)
Instances For
Equations
- String.Iterator.hasNext x = match x with | { s := s, i := i } => decide (i.byteIdx < (String.endPos s).byteIdx)
Instances For
Equations
- String.Iterator.hasPrev x = match x with | { s := s, i := i } => decide (i.byteIdx > 0)
Instances For
Equations
- String.Iterator.setCurr x✝ x = match x✝, x with | { s := s, i := i }, c => { s := String.set s i c, i := i }
Instances For
Equations
- String.Iterator.toEnd x = match x with | { s := s, i := i } => { s := s, i := String.endPos s }
Instances For
Equations
- String.Iterator.extract x✝ x = match x✝, x with | { s := s₁, i := b }, { s := s₂, i := e } => if (decide (s₁ ≠ s₂) || decide (b > e)) = true then "" else String.extract s₁ b e
Instances For
Equations
Instances For
Equations
- String.Iterator.remainingToString x = match x with | { s := s, i := i } => String.extract s i (String.endPos s)
Instances For
Equations
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.offsetOfPos s pos = String.offsetOfPosAux s pos 0 0
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.foldl f init s = String.foldlAux f s (String.endPos s) 0 init
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.foldr f init s = String.foldrAux f init s (String.endPos s) 0
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.contains s c = String.any s fun (a : Char) => a == c
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- String.isNat s = (!String.isEmpty s && String.all s fun (x : Char) => Char.isDigit x)
Instances For
Equations
- String.toNat? s = if String.isNat s = true then some (String.foldl (fun (n : Nat) (c : Char) => n * 10 + (Char.toNat c - Char.toNat (Char.ofNat 48))) 0 s) else none
Instances For
Return true
iff the substring of byte size sz
starting at position off1
in s1
is equal to that starting at off2
in s2.
.
False if either substring of that byte size does not exist.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Return true iff p
is a prefix of s
Equations
- String.isPrefixOf p s = String.substrEq p 0 s 0 (String.endPos p).byteIdx
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.toString x = match x with | { str := s, startPos := b, stopPos := e } => String.extract s b e
Instances For
Equations
- Substring.toIterator x = match x with | { str := s, startPos := b, stopPos := stopPos } => { s := s, i := b }
Instances For
Return the codepoint at the given offset into the substring.
Equations
- Substring.get x✝ x = match x✝, x with | { str := s, startPos := b, stopPos := stopPos }, p => String.get s (b + p)
Instances For
Given an offset of a codepoint into the substring, return the offset there of the next codepoint.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an offset of a codepoint into the substring, return the offset there of the previous codepoint.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.nextn x✝ 0 x = x
- Substring.nextn x✝ (Nat.succ i) x = Substring.nextn x✝ i (Substring.next x✝ x)
Instances For
Equations
- Substring.prevn x✝ 0 x = x
- Substring.prevn x✝ (Nat.succ i) x = Substring.prevn x✝ i (Substring.prev x✝ x)
Instances For
Return the offset into s
of the first occurrence of c
in s
,
or s.bsize
if c
doesn't occur.
Equations
- Substring.posOf s c = match s with | { str := s, startPos := b, stopPos := e } => { byteIdx := (String.posOfAux s c e b).byteIdx - b.byteIdx }
Instances For
Equations
- Substring.drop x✝ x = match x✝, x with | ss@h:{ str := s, startPos := b, stopPos := e }, n => { str := s, startPos := b + Substring.nextn ss n 0, stopPos := e }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.take x✝ x = match x✝, x with | ss@h:{ str := s, startPos := b, stopPos := stopPos }, n => { str := s, startPos := b, stopPos := b + Substring.nextn ss n 0 }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.atEnd x✝ x = match x✝, x with | { str := str, startPos := b, stopPos := e }, p => b + p == e
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.splitOn s sep = if (sep == "") = true then [s] else Substring.splitOn.loop s sep 0 0 0 []
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.foldl f init s = match s with | { str := s, startPos := b, stopPos := e } => String.foldlAux f s e b init
Instances For
Equations
- Substring.foldr f init s = match s with | { str := s, startPos := b, stopPos := e } => String.foldrAux f init s e b
Instances For
Equations
- Substring.any s p = match s with | { str := s, startPos := b, stopPos := e } => String.anyAux s e p b
Instances For
Equations
- Substring.contains s c = Substring.any s fun (a : Char) => a == c
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.takeWhile x✝ x = match x✝, x with | { str := s, startPos := b, stopPos := e }, p => let e := Substring.takeWhileAux s e p b; { str := s, startPos := b, stopPos := e }
Instances For
Equations
- Substring.dropWhile x✝ x = match x✝, x with | { str := s, startPos := b, stopPos := e }, p => let b := Substring.takeWhileAux s e p b; { str := s, startPos := b, stopPos := e }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Substring.isNat s = Substring.all s fun (c : Char) => Char.isDigit c
Instances For
Equations
- Substring.toNat? s = if Substring.isNat s = true then some (Substring.foldl (fun (n : Nat) (c : Char) => n * 10 + (Char.toNat c - Char.toNat (Char.ofNat 48))) 0 s) else none
Instances For
Equations
- Substring.beq ss1 ss2 = (Substring.bsize ss1 == Substring.bsize ss2 && String.substrEq ss1.str ss1.startPos ss2.str ss2.startPos (Substring.bsize ss1))
Instances For
Equations
- String.drop s n = Substring.toString (Substring.drop (String.toSubstring s) n)
Instances For
Equations
Instances For
Equations
- String.take s n = Substring.toString (Substring.take (String.toSubstring s) n)
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
- String.startsWith s pre = (Substring.take (String.toSubstring s) (String.length pre) == String.toSubstring pre)
Instances For
Equations
- String.endsWith s post = (Substring.takeRight (String.toSubstring s) (String.length post) == String.toSubstring post)
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
- String.nextWhile s p i = Substring.takeWhileAux s (String.endPos s) p i
Instances For
Equations
- String.nextUntil s p i = String.nextWhile s (fun (c : Char) => !p c) i
Instances For
Equations
Instances For
Equations
Instances For
Equations
- String.capitalize s = String.set s 0 (Char.toUpper (String.get s 0))
Instances For
Equations
- String.decapitalize s = String.set s 0 (Char.toLower (String.get s 0))