<div dir="ltr"><br><br><div class="gmail_quote">On Tue, Sep 16, 2008 at 3:48 PM, Alexander Dunlap <span dir="ltr">&lt;<a href="mailto:alexander.dunlap@gmail.com">alexander.dunlap@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="Wj3C7c">On Tue, 16 Sep 2008, Levi Stephen wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
I&#39;m looking for how best to represent selections from a set of items.<br>
<br>
For example, consider a soccer/football type game.<br>
<br>
You would have a Player data type. The game would store a player pool of all<br>
players in that game. Each club will have a number of players from that<br>
player pool, each match will involve that club selecting a number of players<br>
from its list of players.<br>
<br>
What is the best way to structure this data and hopefully at the type level<br>
enforce this subset type relationship?<br>
<br>
Thanks,<br>
Levi<br>
<br>
</blockquote>
<br></div></div>
Hi Levi et al.,<br>
<br>
One way would be to use Data.Map or Data.IntMap to store a list of IDs and then have each club store a list of IDs. For example,<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
data Player = ...<br>
type Id = ... -- probably Int or String<br>
newtype Pool = Pool (Data.Map.Map Id Player)<br>
data Club = Club { ..., players :: [Id] }<br>
</blockquote>
<br>
Then, you can Data.Map.lookup a particular player from an the IDs in order to figure out what players a club owns.<br>
<br>
Depending on how you&#39;re using it, you could also store the list of clubs using a particular player along with the player:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
data Club = ...<br>
data Player = Player { ..., clubs :: [Club] }<br>
newtype Pool = Pool (Data.Set.Set Player)<br>
</blockquote>
<br>
but I think the former is probably closer to what you&#39;re looking for. Also, there might be more tricky ways of doing this, but this is simple and probably the way I&#39;d do it: you don&#39;t have any problems enforcing the subset type relationship as long as you insert sane IDs.<br>

<br>
Alex</blockquote><div><br></div><div>Thanks for the reply Alex, and for reminding me of simple approaches.<br><br>Is using ids and lookups like this common practice in Haskell when one type needs to reference a possibly updating value of another type?</div>
<div><br></div><div>Thanks,<br>Levi</div></div><br></div>