<br><br><div class="gmail_quote">On Sun, Jun 10, 2012 at 6:21 AM, Noon Silk <span dir="ltr">&lt;<a href="mailto:noonslists@gmail.com" target="_blank">noonslists@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">

Hi,<br>
<br>
 I&#39;m clearly new to haskell, and I suppose those is a basic question,<br>
but after a bit of searching I&#39;ve been unable to figure out the &quot;best&quot;<br>
way to do this. I was first trying to find out how to, say, get a<br>
random element from a list, but I&#39;m starting to think that may not be<br>
the best way (because list access isn&#39;t constant time, among other<br>
reasons). So, I wonder if there is a more direct way to just get a<br>
random word from a wordfile (i.e. one word per line) ... can anyone<br>
suggest a method?</blockquote><div><br></div><div>My preferred option, assuming the file sizes make it amenable, is to use Iteratees to fold the wordlists into an IntMap of words.  You can then take the size of the map and choose n unique Ints in the range.</div>

<div><br></div><div>Note that any algorithm is going to include these basic steps. (Get the size, pick randoms, access the words at the key/line number).  The most direct approach would basically be imperative and in the IO monad, using things like openFile and hSeek.</div>
<div><br></div><div>This approach gets harder if you want to pull words out of multiple wordlists.</div>
</div>