Avatar
omochimetaru 3/24/2022 2:58 AM
Regex { let e0 = RegexComponentBuilder.buildExpression(regex0) // Component<Regex<Substring>> let e1 = RegexComponentBuilder.buildExpression(regex1) // Component<Regex<(Substring, Int)>> let e2: Regex<(Substring, Float)> if condition { let comp = RegexComponentBuilder.buildExpression(regex2) // Component<Regex<(Substring, Float)>> e2 = RegexComponentBuilder.buildEither(first: comp) // Regex<(Substring, Float)> } else { let comp = RegexComponentBuilder.buildExpression(regex3) // Component<Regex<(Substring, Float)>> e2 = RegexComponentBuilder.buildEither(first: comp) // Regex<(Substring, Float)> } let r0 = RegexComponentBuilder.buildPartialBlock(first: e0) let r1 = RegexComponentBuilder.buildPartialBlock(accumulated: r0, next: e1) let r2 = RegexComponentBuilder.buildPartialBlock(accumulated: r1, next: e2) return r2 } // Regex<(Substring, Int, Float)>
2:58 AM
partialBlockは reduceの s += x みたいな形にする
2:58 AM
だから2つの場合の合成を書ければ、N段の合成が書けるようになる
2:59 AM
ただ2つの場合において、左と右のタプル要素数の組み合わせに対応するために、たくさんオーバーロード書かないといけないという話