Module imm/string

imm/string
Stability: unstable — for one release only, and for one reason: D10 flipped `replace` to replace EVERY occurrence, and the two aliases it displaced (`replace_first`, `replace_all`) are still here, marked deprecated at their definitions and due to be removed. Nothing else on this surface is moving — the byte-offset vocabulary is D4's and matches `String`'s method for method, which is what makes the two interchangeable at a call site. Freezing follows the alias removal. — stable modules only change additively; this one may still change.

Immutable, thread-safe UTF-8 string type.

Uses atomic reference counting for safe sharing across threads. All "modification" operations return a new string; the original is unchanged — and each one allocates, since there is no shared structure between two ImmStrings: this is a flat byte buffer, cheap to CLONE (a refcount bump) and O(n) to derive from.

Offsets are BYTES, as everywhere in Yo after D4: len, byte_at, slice, index_of and the Pattern-shaped predicates all count bytes, while chars/char_indices/at are the rune-aware vocabulary and is_char_boundary/floor_char_boundary/ceil_char_boundary snap an arbitrary offset to one. docs/en-US/STRINGS.md is the full contract.

Stability

unstable — for one release only, and for one reason: D10 flipped replace to replace EVERY occurrence, and the two aliases it displaced (replace_first, replace_all) are still here, marked deprecated at their definitions and due to be removed. Nothing else on this surface is moving — the byte-offset vocabulary is D4's and matches String's method for method, which is what makes the two interchangeable at a call site. Freezing follows the alias removal.

Types

ImmString atomic object
ImmString

Immutable, thread-safe UTF-8 string.

Uses atomic RC — cheap to clone, safe to share across threads. No mutable operations. All "modification" methods return a new ImmString.

Empty strings are zero-allocation (null pointer, zero length).

Fields

NameTypeDescription
_ptr?(*(u8))
_lenusize
_capacityusize

Trait Implementations

impl(generic(T : Type), where(T <: ToString), T : (ToString))
impl(generic(T : Type), where(T <: ToString), T : (ToString), Format)
format : fn(self : Self, spec : str) -> String

Render self under spec. An unrecognised spec degrades to the plain to_string() rendering rather than failing.

Parameters

NameTypeNotes
selfSelf
specstr

Returns: String

impl(ImmString, Acyclic())
impl(ImmString, Dispose(...))
dispose : (ImmString) fn(self : ImmString) -> unit

Release the resources self owns — a file descriptor, a socket, a lock, a buffer the allocator handed out. Called automatically when the last reference to the value goes away, so an implementor never calls it directly and must tolerate being the only one who ever does.

It must be safe to run exactly once: the runtime calls it at refcount zero, and a type that also exposes an explicit close/release is responsible for making the second call a no-op.

Parameters

NameTypeNotes
selfImmString

Returns: unit

impl(ImmString, ...)
new : (ImmString) fn() -> ImmString

Create a new empty string (zero allocation).

Returns: ImmString

from : (ImmString) fn(s : str) -> ImmString

Create a string from a str slice (copies the bytes).

Parameters

NameTypeNotes
sstr

Returns: ImmString

from_string : (ImmString) fn(s : String) -> ImmString

Create a string from a standard (mutable) String by copying its bytes.

Parameters

NameTypeNotes
sString

Returns: ImmString

len : (ImmString) fn(self : ImmString) -> usize

Number of BYTES in this string's UTF-8 encoding — O(1).

BYTE basis, the unit every index on this type speaks: slice, index_of, byte_at and at all take or return byte offsets, and it agrees with std/string's String.len(), str.len() and Rust's str::len().

For "how many runes" use chars().count() (O(n)); to walk runes together with the byte offset each one starts at, use char_indices(). (plans/archive/STD_API_AUDIT_D4_PLAN.md D4 PR 4 — this returned a RUNE count before that flip, and a bytes_len() alias carried the byte count; the alias was DELETED with the flip because it had no consumer left.)

Parameters

NameTypeNotes
selfImmString

Returns: usize

is_empty : (ImmString) fn(self : ImmString) -> bool

Check if the string is empty.

Parameters

NameTypeNotes
selfImmString

Returns: bool

as_str : (ImmString) fn(self : ImmString) -> str

Get a str view of the string's bytes (zero-copy borrow).

Parameters

NameTypeNotes
selfImmString

Returns: str

byte_at : (ImmString) fn(self : ImmString, index : usize) -> Option(u8)

Get the byte at a given index, or .None if out of bounds.

Parameters

NameTypeNotes
selfImmString
indexusize

Returns: Option(u8)

concat : (ImmString) fn(self : ImmString, other : ImmString) -> ImmString

Concatenate two strings, returning a new string. Uses COW: if this string has a unique reference and enough capacity, appends in-place.

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: ImmString

slice : (ImmString) fn(self : ImmString, start : usize, end : usize) -> ImmString

Extract a byte-range substring [start, end). Returns a new string. If indices are out of bounds, clamps to valid range.

Parameters

NameTypeNotes
selfImmString
startusize
endusize

Returns: ImmString

starts_with : (ImmString) fn(self : ImmString, prefix : ImmString) -> bool

Check if the string starts with a given prefix.

Parameters

NameTypeNotes
selfImmString
prefixImmString

Returns: bool

ends_with : (ImmString) fn(self : ImmString, suffix : ImmString) -> bool

Check if the string ends with a given suffix.

Parameters

NameTypeNotes
selfImmString
suffixImmString

Returns: bool

index_of : (ImmString) fn(self : ImmString, needle : ImmString, from_index : usize) -> Option(usize)

Find the first occurrence of needle starting at from_index. Returns byte index or .None.

Parameters

NameTypeNotes
selfImmString
needleImmString
from_indexusize

Returns: Option(usize)

contains : (ImmString) fn(self : ImmString, needle : ImmString) -> bool

Check if the string contains a given substring.

Parameters

NameTypeNotes
selfImmString
needleImmString

Returns: bool

split : (ImmString) fn(self : ImmString, sep : ImmString) -> List(ImmString)

Split the string by a separator, returning an immutable List of Strings.

Parameters

NameTypeNotes
selfImmString
sepImmString

Returns: List(ImmString)

_is_whitespace : (ImmString) fn(b : u8) -> bool

Check if a byte is ASCII whitespace.

Parameters

NameTypeNotes
bu8

Returns: bool

trim : (ImmString) fn(self : ImmString) -> ImmString

Trim leading and trailing ASCII whitespace.

Parameters

NameTypeNotes
selfImmString

Returns: ImmString

trim_start : (ImmString) fn(self : ImmString) -> ImmString

Trim leading ASCII whitespace.

Parameters

NameTypeNotes
selfImmString

Returns: ImmString

trim_end : (ImmString) fn(self : ImmString) -> ImmString

Trim trailing ASCII whitespace.

Parameters

NameTypeNotes
selfImmString

Returns: ImmString

to_lowercase : (ImmString) fn(self : ImmString) -> ImmString

Convert all ASCII uppercase letters to lowercase. Uses COW: if this string has a unique reference, modifies bytes in-place.

Parameters

NameTypeNotes
selfImmString

Returns: ImmString

to_uppercase : (ImmString) fn(self : ImmString) -> ImmString

Convert all ASCII lowercase letters to uppercase. Uses COW: if this string has a unique reference, modifies bytes in-place.

Parameters

NameTypeNotes
selfImmString

Returns: ImmString

_replace_scan : (ImmString) fn(self : ImmString, search : ImmString, replacement : ImmString, limit : usize, bounded : bool) -> ImmString

Shared left-to-right scanner behind replace, replacen and replace_first. When bounded is true it stops after limit replacements and copies the rest verbatim; limit == 0 with bounded replaces nothing. An empty search never matches (it would not terminate), matching the pre-D10 replace_all.

Parameters

NameTypeNotes
selfImmString
searchImmString
replacementImmString
limitusize
boundedbool

Returns: ImmString

replace : (ImmString) fn(self : ImmString, search : ImmString, replacement : ImmString) -> ImmString

Replace EVERY occurrence of search with replacement (D10 — Rust's str::replace). An empty search returns self unchanged.

NOTE this replaced only the FIRST occurrence before D10. Use replacen for a bounded count.

Parameters

NameTypeNotes
selfImmString
searchImmString
replacementImmString

Returns: ImmString

replacen : (ImmString) fn(self : ImmString, search : ImmString, replacement : ImmString, count : usize) -> ImmString

Replace the first count occurrences of search with replacement, leaving any later ones alone — Rust's str::replacen.

replacen(s, r, usize(1)) is the pre-D10 meaning of replace.

Parameters

NameTypeNotes
selfImmString
searchImmString
replacementImmString
countusize

Returns: ImmString

replace_first : (ImmString) fn(self : ImmString, search : ImmString, replacement : ImmString) -> ImmString

Replace the first occurrence of search with replacement.

DEPRECATED (D10), kept for one release: this is what replace used to mean. Write replacen(search, replacement, usize(1)) instead.

Parameters

NameTypeNotes
selfImmString
searchImmString
replacementImmString

Returns: ImmString

replace_all : (ImmString) fn(self : ImmString, search : ImmString, replacement : ImmString) -> ImmString

Replace all occurrences of search with replacement.

DEPRECATED (D10), kept for one release: replace now means this.

Parameters

NameTypeNotes
selfImmString
searchImmString
replacementImmString

Returns: ImmString

repeat : (ImmString) fn(self : ImmString, n : usize) -> ImmString

Repeat the string n times.

Parameters

NameTypeNotes
selfImmString
nusize

Returns: ImmString

_decode_rune_at : (ImmString) fn(self : ImmString, byte_index : usize) -> Option(rune)

Decode a single UTF-8 rune starting at byte index.

Parameters

NameTypeNotes
selfImmString
byte_indexusize

Returns: Option(rune)

at : (ImmString) fn(self : ImmString, index : usize) -> Option(rune)

Decode the rune that STARTS at byte offset index.

BYTE basis (plans/archive/STD_API_AUDIT_D4_PLAN.md D4 PR 4 — this took a rune index before the flip; it now mirrors std/string's String.at). .None is returned for the three ways a byte offset can fail to name a rune: at or past len(), inside a rune (a UTF-8 continuation byte), or on bytes that do not decode.

while(i < s.len(), { s.at(i) }) therefore visits continuation bytes and yields .None at each of them — use char_indices() (or chars()) to walk runes.

Parameters

NameTypeNotes
selfImmString
indexusize

Returns: Option(rune)

impl(ImmString, ...)
chars : (ImmString) fn(self : ImmString) -> ImmStringChars

Iterate the string's runes.

Parameters

NameTypeNotes
selfImmString

Returns: ImmStringChars

char_indices : (ImmString) fn(self : ImmString) -> ImmStringCharIndices

Iterate (byte_offset, rune) pairs — Rust's char_indices().

Parameters

NameTypeNotes
selfImmString

Returns: ImmStringCharIndices

is_char_boundary : (ImmString) fn(self : ImmString, index : usize) -> bool

True when byte offset index sits on a rune boundary.

0 and len() are always boundaries; an index past the end never is. Mirrors Rust's str::is_char_boundary.

Parameters

NameTypeNotes
selfImmString
indexusize

Returns: bool

floor_char_boundary : (ImmString) fn(self : ImmString, index : usize) -> usize

The largest byte offset <= index that sits on a rune boundary.

index is clamped to len() first, so the answer is always a boundary of THIS string.

Parameters

NameTypeNotes
selfImmString
indexusize

Returns: usize

ceil_char_boundary : (ImmString) fn(self : ImmString, index : usize) -> usize

The smallest byte offset >= index that sits on a rune boundary.

index at or past len() clamps to len(), which is a boundary, so this always terminates on a valid one.

Parameters

NameTypeNotes
selfImmString
indexusize

Returns: usize

try_substring : (ImmString) fn(self : ImmString, start : usize, end : usize) -> Option(ImmString)

Byte-range slice that REFUSES a bad range instead of clamping it — Rust's s.get(start..end), and the checked counterpart of slice.

.None for start > end, for end past len(), and for an endpoint inside a rune (which would produce invalid UTF-8). An empty but valid range yields .Some of the empty string.

Parameters

NameTypeNotes
selfImmString
startusize
endusize

Returns: Option(ImmString)

impl(ImmString, Eq(ImmString)(...))
impl(ImmString, ...)
eq_str : (ImmString) fn(self : ImmString, other : str) -> bool

Compare with a str for equality.

Parameters

NameTypeNotes
selfImmString
otherstr

Returns: bool

impl(ImmString, Ord(ImmString)(...))
impl(ImmString, Hash(...))
hash : (ImmString) fn(generic(H) self : ImmString, hasher : H : (Hasher)) -> unit

Feed this value's identity into hasher.

Parameters

NameTypeNotes
selfImmString
hasherH : (Hasher)

Returns: unit

impl(ImmString, ToString(...))
to_string : (ImmString) fn(self : ImmString) -> String

Render self as the text a USER should read — Rust's Display::fmt, not its Debug. Hand-written (or generated by derive(Error) from a per-variant format string) whenever the structural form would be wrong.

Parameters

NameTypeNotes
selfImmString

Returns: String

impl(ImmString, Default(...))
default : (ImmString) fn() -> ImmString

The default value of the type.

Returns: ImmString

Methods
== : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

!= : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

< : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

<= : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

> : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

>= : (ImmString) fn(self : ImmString, other : ImmString) -> bool

Parameters

NameTypeNotes
selfImmString
otherImmString

Returns: bool

cmp : (ImmString) fn(lhs : ImmString, rhs : ImmString) -> Ordering

Parameters

NameTypeNotes
lhsImmString
rhsImmString

Returns: Ordering

ImmStringChars

Rune iterator for ImmString — created by chars().

Fields

NameTypeDescription
_stringImmString
_byte_indexusize

Trait Implementations

impl(generic(I : Type), where(I <: Iterator), I : (Iterator))
into_iter : fn(self : I : (Iterator)) -> I

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: I : (Iterator)

impl(generic(I : Type), where(I <: Iterator), I : (Iterator))
map : fn(generic(A, B, F) self : I : (Iterator), f : F : (Fn(A) -> B)) -> IterMap(I : (Iterator), B, F : (Fn(A) -> B))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> B)

Returns: IterMap(I : (Iterator), B, F : (Fn(A) -> B))

filter : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterFilter(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterFilter(I : (Iterator), F : (Fn(A) -> bool))

take : fn(generic(A) self : I : (Iterator), n : usize) -> IterTake(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: IterTake(I : (Iterator))

skip : fn(generic(A) self : I : (Iterator), n : usize) -> IterSkip(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: IterSkip(I : (Iterator))

enumerate : fn(generic(A) self : I : (Iterator)) -> IterEnumerate(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: IterEnumerate(I : (Iterator))

zip : fn(generic(A, J, B) self : I : (Iterator), other : J : (Iterator)) -> IterZip(I : (Iterator), J : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
otherJ : (Iterator)

Returns: IterZip(I : (Iterator), J : (Iterator))

fold : fn(generic(A, Acc, F) self : I : (Iterator), init : Acc, f : F : (Fn(Acc, A) -> Acc)) -> Acc

Parameters

NameTypeNotes
selfI : (Iterator)
initAcc
fF : (Fn(Acc, A) -> Acc)

Returns: Acc

for_each : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> unit)) -> unit

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> unit)

Returns: unit

count : fn(generic(A) self : I : (Iterator)) -> usize

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: usize

any : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> bool

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: bool

all : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> bool

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: bool

find : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: Option(A)

position : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> Option(usize)

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: Option(usize)

last : fn(generic(A) self : I : (Iterator)) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A)

nth : fn(generic(A) self : I : (Iterator), n : usize) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: Option(A)

sum : fn(generic(A) self : I : (Iterator)) -> A : ((Output : Type, + : fn(lhs : Self, rhs : A) -> Output) + Default)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: A : ((Output : Type, + : fn(lhs : Self, rhs : A) -> Output) + Default)

min : fn(generic(A) self : I : (Iterator)) -> Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

max : fn(generic(A) self : I : (Iterator)) -> Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

chain : fn(generic(A, J) self : I : (Iterator), other : J : (Iterator)) -> IterChain(I : (Iterator), J : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
otherJ : (Iterator)

Returns: IterChain(I : (Iterator), J : (Iterator))

take_while : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterTakeWhile(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterTakeWhile(I : (Iterator), F : (Fn(A) -> bool))

skip_while : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterSkipWhile(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterSkipWhile(I : (Iterator), F : (Fn(A) -> bool))

filter_map : fn(generic(A, B, F) self : I : (Iterator), f : F : (Fn(A) -> Option(B))) -> IterFilterMap(I : (Iterator), B, F : (Fn(A) -> Option(B)))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> Option(B))

Returns: IterFilterMap(I : (Iterator), B, F : (Fn(A) -> Option(B)))

peekable : fn(generic(A) self : I : (Iterator)) -> IterPeekable(I : (Iterator), A)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: IterPeekable(I : (Iterator), A)

collect : fn(self : I : (Iterator), C : Type) -> C : (FromIterator)

Parameters

NameTypeNotes
selfI : (Iterator)
CTypecomptime

Returns: C : (FromIterator)

impl(ImmStringChars, Iterator(...))
Item : rune
next : (ImmStringChars) fn(self : ImmStringChars) -> Option(rune)

Advance the iterator and return the next value, or None when exhausted.

Parameters

NameTypeNotes
selfImmStringChars

Returns: Option(rune)

ImmStringCharIndices

(byte_offset, rune) iterator for ImmString — created by char_indices(). Walks in lockstep with ImmStringChars.

Fields

NameTypeDescription
_stringImmString
_byte_indexusize

Trait Implementations

impl(generic(I : Type), where(I <: Iterator), I : (Iterator))
into_iter : fn(self : I : (Iterator)) -> I

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: I : (Iterator)

impl(generic(I : Type), where(I <: Iterator), I : (Iterator))
map : fn(generic(A, B, F) self : I : (Iterator), f : F : (Fn(A) -> B)) -> IterMap(I : (Iterator), B, F : (Fn(A) -> B))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> B)

Returns: IterMap(I : (Iterator), B, F : (Fn(A) -> B))

filter : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterFilter(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterFilter(I : (Iterator), F : (Fn(A) -> bool))

take : fn(generic(A) self : I : (Iterator), n : usize) -> IterTake(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: IterTake(I : (Iterator))

skip : fn(generic(A) self : I : (Iterator), n : usize) -> IterSkip(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: IterSkip(I : (Iterator))

enumerate : fn(generic(A) self : I : (Iterator)) -> IterEnumerate(I : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: IterEnumerate(I : (Iterator))

zip : fn(generic(A, J, B) self : I : (Iterator), other : J : (Iterator)) -> IterZip(I : (Iterator), J : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
otherJ : (Iterator)

Returns: IterZip(I : (Iterator), J : (Iterator))

fold : fn(generic(A, Acc, F) self : I : (Iterator), init : Acc, f : F : (Fn(Acc, A) -> Acc)) -> Acc

Parameters

NameTypeNotes
selfI : (Iterator)
initAcc
fF : (Fn(Acc, A) -> Acc)

Returns: Acc

for_each : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> unit)) -> unit

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> unit)

Returns: unit

count : fn(generic(A) self : I : (Iterator)) -> usize

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: usize

any : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> bool

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: bool

all : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> bool

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: bool

find : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: Option(A)

position : fn(generic(A, F) self : I : (Iterator), pred : F : (Fn(A) -> bool)) -> Option(usize)

Parameters

NameTypeNotes
selfI : (Iterator)
predF : (Fn(A) -> bool)

Returns: Option(usize)

last : fn(generic(A) self : I : (Iterator)) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A)

nth : fn(generic(A) self : I : (Iterator), n : usize) -> Option(A)

Parameters

NameTypeNotes
selfI : (Iterator)
nusize

Returns: Option(A)

sum : fn(generic(A) self : I : (Iterator)) -> A : ((Output : Type, + : fn(lhs : Self, rhs : A) -> Output) + Default)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: A : ((Output : Type, + : fn(lhs : Self, rhs : A) -> Output) + Default)

min : fn(generic(A) self : I : (Iterator)) -> Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

max : fn(generic(A) self : I : (Iterator)) -> Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: Option(A : ((< : fn(lhs : Self : ((== : fn(lhs : Self, rhs : A) -> bool, != : fn(lhs : Self, rhs : A) -> bool)), rhs : A) -> bool, <= : fn(lhs : Self, rhs : A) -> bool, > : fn(lhs : Self, rhs : A) -> bool, >= : fn(lhs : Self, rhs : A) -> bool, cmp : fn(lhs : Self, rhs : A) -> Ordering)))

chain : fn(generic(A, J) self : I : (Iterator), other : J : (Iterator)) -> IterChain(I : (Iterator), J : (Iterator))

Parameters

NameTypeNotes
selfI : (Iterator)
otherJ : (Iterator)

Returns: IterChain(I : (Iterator), J : (Iterator))

take_while : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterTakeWhile(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterTakeWhile(I : (Iterator), F : (Fn(A) -> bool))

skip_while : fn(generic(A, F) self : I : (Iterator), f : F : (Fn(A) -> bool)) -> IterSkipWhile(I : (Iterator), F : (Fn(A) -> bool))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> bool)

Returns: IterSkipWhile(I : (Iterator), F : (Fn(A) -> bool))

filter_map : fn(generic(A, B, F) self : I : (Iterator), f : F : (Fn(A) -> Option(B))) -> IterFilterMap(I : (Iterator), B, F : (Fn(A) -> Option(B)))

Parameters

NameTypeNotes
selfI : (Iterator)
fF : (Fn(A) -> Option(B))

Returns: IterFilterMap(I : (Iterator), B, F : (Fn(A) -> Option(B)))

peekable : fn(generic(A) self : I : (Iterator)) -> IterPeekable(I : (Iterator), A)

Parameters

NameTypeNotes
selfI : (Iterator)

Returns: IterPeekable(I : (Iterator), A)

collect : fn(self : I : (Iterator), C : Type) -> C : (FromIterator)

Parameters

NameTypeNotes
selfI : (Iterator)
CTypecomptime

Returns: C : (FromIterator)

impl(ImmStringCharIndices, Iterator(...))
Item : IterPair(usize, rune)
next : (ImmStringCharIndices) fn(self : ImmStringCharIndices) -> Option(IterPair(usize, rune))

Advance the iterator and return the next value, or None when exhausted.

Parameters

NameTypeNotes
selfImmStringCharIndices

Returns: Option(IterPair(usize, rune))