let ops = module { str="", } => { let len = import "std/lists.ucg".len(mod.str); let split_on = module{ on=" ", str=mod.str, } => (result) { let splitter = func(acc, char) => acc{ out = select char == mod.on, acc.out, { true = acc.out + [acc.buf], }, buf = select char != mod.on, "", { true = acc.buf + char, }, }; let accumulated = reduce(splitter, {out=[], buf=""}, mod.str); let result = accumulated.out + [accumulated.buf]; }; let split_at = func(idx) => filter( func(name, val) => name != "counter", reduce( func(acc, char) => acc{ counter = acc.counter + 1, left = select acc.counter < idx, acc.left, { true = acc.left + char, }, right = select acc.counter >= idx, acc.right, { true = acc.right + char, }, }, {counter = 0, left = "", right = ""}, mod.str ) ); let substr = module{ str = mod.str, start = 0, end = len, } => (result) { let reducer = func(acc, char) => acc{ counter = acc.counter + 1, str = select ((acc.counter >= mod.start) && (acc.counter <= mod.end)), acc.str, { true = acc.str + char, }, }; let result = reduce( reducer, {counter = 0, str = ""}, mod.str).str; }; };