Hello!  You have several options.  First, consider that when you lookup (see Prelude.find) a field in the alist, you&#39;re going to stop as soon as you find the first match.  So, as long as you&#39;re appending new fields to the front of list, then you&#39;ll be ok (it will be correct, but not efficient).<div>

<br></div><div>If I understand correctly, you want to be able to associate up to one value with Root, one with Oct, and one with Mode.  In that case, you may want to define your alist like this:<div><br></div><div>data Key = Root | Oct | Mode deriving (Show, Eq)</div>

<div><br></div><div>type AList a = [(Key, a)]</div><div><br></div><div>Then, you can do Prelude.lookup Root, Prelude.lookup Oct, and Prelude.lookup Mode to get the respective values from the AList.</div><div><br></div><div>

Finally, you may want to use Data.Map.  It provides an efficient AList.</div><div><br></div><div>Hope that helps!</div><div><br></div><div>- Philip<br><br><div class="gmail_quote">On Wed, May 26, 2010 at 2:59 AM, Tom Jordan <span dir="ltr">&lt;<a href="mailto:viresh53@gmail.com">viresh53@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>Greetings,</div><div><br></div><div>I&#39;m struggling to find a way to define an &quot;Alist&quot; once, and then simply add-in &quot;Fields&quot; to it incrementally.. without having to keep using new identifiers/variables to hold the result of each &quot;addin&quot; expression.</div>


<div>I understand that pure Functional Programming doesn&#39;t use destructive state changes, but I&#39;m wondering if there is a way to make this happen using Monads, for example  (which I have a cursory understanding of..)</div>


<div><br></div><div>Instead of doing this:</div><div><br></div><div><div>type Root = String</div><div>type Oct  = Integer</div><div>type Mode = Integer</div><div><br></div><div>data Field = Root Root | Oct Oct | Mode Mode deriving (Show)</div>


<div><br></div><div>type Alist = [Field]</div><div><br></div><div>addin :: Alist -&gt; Field -&gt; Alist</div><div>addin p f = f:p</div><div><br></div><div>p0 :: Alist</div><div>p0 = []</div><div>p1 = addin p0 (Root &quot;c&quot;)</div>


<div>p2 = addin p1 (Oct 4)</div><div>p3 = addin p2 (Mode 3)</div><div>p4 = addin p3 (Oct 3)</div><div>-- ... p42, etc</div></div><div><br></div><div><br></div><div>For the Alist version, when adding-in a Field with the same constructor-name as one that has already been added-in, it adds-in a brand new entry (with a repeated key-name (in the form of another constructor) and its associated value), as a normal association list does..</div>


<div><br></div><div>I&#39;m also looking to define a Property-List version, where a Field-name/constructor can update a previous value (if the Field has already been added), or add-in a new entry if the Field hasn&#39;t been added yet.</div>


<div><br></div><div><br></div><div>Many Thanks,</div><div><br></div><font color="#888888"><div>Tom Jordan</div>
</font><br>_______________________________________________<br>
Haskell mailing list<br>
<a href="mailto:Haskell@haskell.org">Haskell@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell" target="_blank">http://www.haskell.org/mailman/listinfo/haskell</a><br>
<br></blockquote></div><br></div></div>