I’d go for a custom type, even if it is more verbose.
type Players
= OnePlayer Player
| TwoPlayers Player Player
| ...
Maybe an Int is okay to store whose turn it is, because you can use turn |> modBy amountOfPlayers
.
type alias Game =
{ players : Players
, turn : Int
}
I guess all approaches have tradeoffs, I personally like to make impossible states impossible, but sometimes it’s worth giving up some guarantees