<div dir="ltr"><div class="gmail_extra"><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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><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></blockquote></div><br>You have declared a function that says that it can deal with any type `a` that the *caller* chooses, then provided an implementation that only supports Int.<br><br>Note that :: does not do conversion (as you said "<span style="font-size:12px">Even though I am converting my 'value' parameter to Int"); it declares that the type of `value` *is* Int. Other types will be inferred to match, and this fails at `value:` in a context which wants the type to be a caller-specified `a`, not Int.</span><br clear="all"><div><br></div><div>(I don't think you can coerce an unknown type `a` to Int given only the context `Random a`. You must find a different way to implement this.)</div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div></div>