Почему бы вам просто не написать это явно:
let toTableau2D (a, b, c) =
let toto = a
// ...
Если вы захотите обратиться к seqinit
позже, вы всегда можете восстановить тройку или использовать именованный шаблон:
let toTableau2D ((a, b, c) as seqinit) =
let toto = a
// Do something with seqinit
// ...
РЕДАКТИРОВАТЬ:
Если вы не используете отражение, вы не можете иметь функцию fst
для любого вида кортежей.В вашем примере написание некоторых служебных функций и их повторное использование не повредит:
let fst3 (a, _, _) = a
let snd3 (_, b, _) = b
let thd3 (_, _, c) = c
let toTableau2D (seqinit: seq<'a*'b*'c>) =
let inputd = seqinit |> groupBy2 fst3 snd3
// ...
Если вы хотите, чтобы это работало для произвольного числа элементов кортежей, рассмотрите возможность замены кортежей на списки и использования сопоставления с образцом в списках.