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))