Сопоставление с образцом требует привязки полей записи к некоторым значениям, поэтому вы должны использовать явный синтаксис записи. Таким образом,
fun foo(({id = id, privateStack = x::xs})::players, ...) =
(* do something *)
будет работать.
Обратите внимание, что приведенное выше сопоставление с образцом не является исчерпывающим, обратите внимание на пустой список для players
и пустой список для privateStack
:
fun foo([], ...) = (* do something *)
| foo({id = id, privateStack = []}::players, ...) = (* do something else *)
| foo({id = id, privateStack = x::xs}::players, ...) = (* do something else *)