let subcommandParsers: [String: any SubCommandParserProtocol] = initSubcommands() protocol SubCommandParserProtocol: Sendable { associatedtype T where T: CmdArgs var _parse: @Sendable (StrArrSlice) -> ParsedCmd { get } } extension SubCommandParserProtocol { func parse(args: StrArrSlice) -> ParsedCmd { _parse(args).map(id) } } struct SubCommandParser: SubCommandParserProtocol, Sendable { let _parse: @Sendable (StrArrSlice) -> ParsedCmd init(_ parser: @escaping @Sendable (StrArrSlice) -> ParsedCmd) { _parse = parser } init(_ raw: @escaping @Sendable (StrArrSlice) -> T) { _parse = { args in parseSpecificCmdArgs(raw(args), args) } } }