Stacks and queues are abstract data types that can be implemented in several different ways. The F # list is implemented as an immutable, simply-linked list. Since adding or removing an item from the front of a simply linked list is a constant time operation, F # lists give a good view of the stack. But adding linear time to the list, so they are less suitable for queues.
If you need an ephemeral stack, you can use the built-in System.Collections.Generic.Stack<T> . For a permanent stack, you can implement it yourself. This interface may be a good start:
type IStack<'A> = abstract member Push : 'A -> IStack<'A> abstract member Pop : unit -> 'A * IStack<'A>
or as a recursive data type:
type Stack<'A> = Stack of 'A * Stack<'A> | Empty
But in order to try to answer your question, although the stacks and lists of F # do not match, the lists are distributed in functional programming and, due to their performance characteristics, they are used in places where the C # programmer naturally reaches the stack, since they are constant, they are also better suited for functional programs (which convert fixed data structures rather than changing mutable ones).
source share