Se si sta creando una libreria di classi da condividere con altre applicazioni .NET, e questa è parte dell'interfaccia pubblica, è necessario attenersi ai normali tipi di libreria di classi .NET.
Se stai attaccando esclusivamente al dominio F # o questo fa parte dei dettagli di implementazione privata, preferirei utilizzare i tipi nativi di F #.
Nel tuo caso, tuttavia, l'elenco F # non corrisponde a una coda, almeno non a una coda FIFO (first in, first out). L'elenco F # corrisponde a uno stack (last in, first out).
Non sono a conoscenza di un tipo di dati F # nativo che fornisce tale funzionalità, e infatti, il tipo di dati della coda non si adatta bene al paradigma di programmazione puramente funzionale (non sono un esperto di programmazione funzionale quindi forse qualcuno dimostrerà questa affermazione errata).
Quindi la grande domanda su come risolvere il problema è davvero, il tuo problema è adatto al paradigma della programmazione funzionale? In questo caso, dovresti evitare di utilizzare tipi di dati imperativi come le code e provare a risolvere il problema utilizzando tipi di dati puramente funzionali.
Se il tuo problema d'altra parte non è adatto a un paradigma di programmazione funzionale, forse non dovresti usare affatto F #, ma usare un paradigma di programmazione più orientato agli oggetti. Non che F # non possa fare programmazione orientata agli oggetti, perché può farlo. Ma se questo è il paradigma di programmazione generale, è IMHO più facile da usare, ad es. C #.