struct Str { pub u64: size pub &char: data impl: inline fn Str.substr(u64: start u64: len Str: s) -> [Str] { len s::data start ptr+ cast(Str) } fn Str.equals(Str: s1 Str:s2) -> [bool] { s1::size s2::size != if { false return } 0 while dup s1::size < do { as [i] s1::data i ptr+ @ s2::data i ptr+ @ != if { false return } i 1 + } drop true } fn Str.starts_with(Str: s2 Str: s1) -> [bool] { s2::size s1::size > if { false return } 0 s2::size s1 Str.substr s2 Str.equals } fn Str.to_int(Str: mut s) -> [u64] { 0 while s::data @ char.is_digit do { 10 * s::data @ '0' - + s::data 1 ptr+ *s::data ! } } } impl Write { inline fn write(Str: s u64: fd) { s::size s::data fd sys_write drop } } impl ToString { inline fn to_string(Str) -> [String] { String.new } } impl Format { inline fn fmt(String Str) -> [String] { String.push_str } }