I didn't look further down yet, so maybe my comment doesn't make any sense, but: it feels like `(string, string option)` or `type target = Target of string | SubTarget of (string * string)` could be a better approach? Unless it really needs to be a string somehow.