ucg 0.5.7

A configuration generation grammar.
Documentation
let ops = module {
    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
        )
    );
};