<div dir="ltr"><div><div>mkStdGen only accepts Ints as seeds.  But your random function, as you typed it, can return any type of random.  You either have to restrict your random function to returning ints, like so:<br><br>myrandoms :: (RandomGen g) => g -> [Int]<br>myrandoms gen = let (value, newGen) = random gen in value:myrandoms (mkStdGen value)<br><br></div>Or you have to find a way to convert any Random a into an Int (not possible), or put another constraint on it, such that you can return all the types you might want that you have the ability to turn into ints, for example:<br><br>myrandoms :: (RandomGen g, Random a, Intable a) => g -> [a]<br>myrandoms gen = let (value, newGen) = random gen in value:myrandoms (mkStdGen $ convertToInt value)<br><br>class Intable a where<br>  convertToInt :: a -> Int<br><br>instance Intable Int where convertToInt = id<br>instance Intable Integer where convertToInt = fromIntegral<br>instance Intable Char where convertToInt s = undefined -- something<br><br></div>Which is obviously tedious, but may be worthwhile depending on your application.<br><br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 1, 2015 at 11:08 AM, Shishir Srivastava <span dir="ltr"><<a href="mailto:shishir.srivastava@gmail.com" target="_blank">shishir.srivastava@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, <div><br></div><div>I am trying to use the output value from the random function to generate the random generator for the next value in list. </div><div><br></div><div>Below is the code - </div><div><br></div><div>----</div><div><div><font face="monospace, monospace">import System.Random</font></div><div><font face="monospace, monospace">myrandoms :: (RandomGen g, Random a) => g -> [a]  </font></div><div><font face="monospace, monospace">myrandoms gen = let (value, newGen) = random gen in value:myrandoms (mkStdGen (value::Int))</font></div><div>----</div><div><br></div><div>however the compilation fails when the module is loaded - </div><div><br></div><div><div>[1 of 1] Compiling Main             ( myrandoms.hs, interpreted )</div><div><br></div><div><font face="monospace, monospace">myrandoms.hs:3:80:</font></div><div><font face="monospace, monospace">    Could not deduce (a ~ Int)</font></div><div><font face="monospace, monospace">    from the context (RandomGen g, Random a)</font></div><div><font face="monospace, monospace">      bound by the type signature for</font></div><div><font face="monospace, monospace">                 myrandoms :: (RandomGen g, Random a) => g -> [a]</font></div><div><font face="monospace, monospace">      at myrandoms.hs:2:14-48</font></div><div><font face="monospace, monospace">      `a' is a rigid type variable bound by</font></div><div><font face="monospace, monospace">          the type signature for</font></div><div><font face="monospace, monospace">            myrandoms :: (RandomGen g, Random a) => g -> [a]</font></div><div><font face="monospace, monospace">          at myrandoms.hs:2:14</font></div><div><font face="monospace, monospace">    Relevant bindings include</font></div><div><font face="monospace, monospace">      value :: a (bound at myrandoms.hs:3:22)</font></div><div><font face="monospace, monospace">      myrandoms :: g -> [a] (bound at myrandoms.hs:3:1)</font></div><div><font face="monospace, monospace">    In the first argument of `mkStdGen', namely `(value :: Int)'</font></div><div><font face="monospace, monospace">    In the first argument of `myrandoms', namely</font></div><div><font face="monospace, monospace">      `(mkStdGen (value :: Int))'</font></div></div><div><br></div><div>----------</div><div><br></div><div>Even though I am converting my 'value' parameter to Int in my new generator, I am unable to see the error behind this.</div><div><br></div><div>Please can someone explain or even better provide a fix.</div><div><br></div><div>Thanks,</div><div><div><div dir="ltr"><font color="#0b5394"><font style="background-color:rgb(255,255,255)"><font face="georgia, serif">Shishir</font><br></font><br></font><br></div></div></div>
</div></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br></div>