Flows and Subflows
In Koru, flows are used to define the sequence of events and their possible outcomes. Flows can be nested to create complex event sequences.
Flows
~import std/io
const file = ~std/io/file:open(file: "example.txt")
| file f |> std/io:print.ln(f.name) |> file { file: f }
| error e |> std/io:eprintln(e.reason) |> error { msg: "Failed to open file" } Proc Implementation
A proc provides the implementation for an event:
~proc greet {
if (name.len == 0) {
return .{ .@"error" = .{ .reason = "Name cannot be empty" } };
}
const msg = try std.fmt.allocPrint(allocator, "Hello, {s}!", .{name});
return .{ .greeting = .{ .message = msg } };
} Invoking Events
Events are invoked with flows:
~greet(name: "World")
| greeting g |> std/io:print.ln(g.message)
| error e |> std/io:eprintln(e.reason)