Been a while since I've used nim, and never had to do this, but I essentially want to define a type for a function that takes in a game state, and some object that the function uses to store state, and returns an updated version of both: ` SelectionStrategy = func(game: GameState, data: auto): (GameState, auto)` Where I essentially want to be able to implement and swap out different algorithms without having to change what data I pass into it, or forcing them to work on the same data. In some languages you'd use abstract classes for this, and others I think Monads? But unsure what the right approach for nim would be. And realized while writing this that it's not actually what I need, but curious what the answer to this is so wanted to ask it anyways.