Да, имеет смысл сделать это.Предлагается избегать лямбда-выражений, чтобы упростить чтение этих функций:
let squash12 (a, (b, c)) = a, b, c
Если вы очень часто сталкиваетесь с внутренними кортежами с различной арностью, их преобразование в списки не является плохой идеей.Например, e
становится кортежем из двух списков:
(a, (b, c)) ~> ([a], [b; c])
(a, b), c) ~> ([a; b], [c])
(a, (b, c, d)) ~> (a, [b; c; d])
И нам нужна только одна функция для последовательности:
let seqsquash sa = sa |> Seq.map (@)
Проблема в том, что вы теряете контроль над размеромвход.Сопоставление с образцом в списке может помочь:
let squash12 (xs, ys) =
match xs, ys with
| [a], [b; c] -> xs, ys
| _ -> failwith "Wrong input size"