<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">I pretty much followed the sequence of steps that led to this final code (see below), but will be looking it over for a while to make sure it sinks in. In the meantime, I get this when I try to use it (sumTwoDice) at the command line:<br><br>[michael@localhost ~]$ ghci rand9<br>GHCi, version 6.10.1: http://www.haskell.org/ghc/&nbsp; :? for help<br>Loading package ghc-prim ... linking ... done.<br>Loading package integer ... linking ... done.<br>Loading package base ... linking ... done.<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( rand9.hs, interpreted )<br>Ok, modules loaded: Main.<br>*Main&gt; sumTwoDice<br><br>&lt;interactive&gt;:1:0:<br>&nbsp;&nbsp;&nbsp; No instance for (Show (Seed -&gt; (Int, Seed)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arising from a use of `print' at
 &lt;interactive&gt;:1:0-9<br>&nbsp;&nbsp;&nbsp; Possible fix:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add an instance declaration for (Show (Seed -&gt; (Int, Seed)))<br>&nbsp;&nbsp;&nbsp; In a stmt of a 'do' expression: print it<br>*Main&gt; <br><br><br>Can I employ a 'do' expression from the command line?<br><br>Also, can I now use functions (&gt;&gt;) (&gt;&gt;=) and 'return' defined in the Prelude and still have this code work?<br><br>Michael<br><br>==================<br><br>{-# LANGUAGE NoImplicitPrelude #-}<br><br>import Prelude hiding ((&gt;&gt;), (&gt;&gt;=), return)<br><br>type Seed = Int<br>type Random a = Seed -&gt; (a, Seed)<br><br>randomNext :: Seed -&gt; Seed<br>randomNext rand = if newRand &gt; 0 then newRand else newRand + 2147483647<br>&nbsp;&nbsp;&nbsp; where newRand = 16807 * lo - 2836 * hi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (hi,lo) = rand `divMod` 127773<br><br>rollDie :: Random Int<br>rollDie seed = ((seed `mod` 6) +
 1, randomNext seed)<br><br>(&gt;&gt;) :: Random a -&gt; Random b -&gt; Random b<br>(&gt;&gt;) m n = \seed0 -&gt;<br>&nbsp; let (result1, seed1) = m seed0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (result2, seed2) = n seed1<br>&nbsp; in (result2, seed2)<br><br>(&gt;&gt;=) :: Random a -&gt; (a -&gt; Random b) -&gt; Random b<br>(&gt;&gt;=) m g = \seed0 -&gt; <br>&nbsp; let (result1, seed1) = m seed0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (result2, seed2) = (g result1) seed1<br>&nbsp; in (result2, seed2)<br><br>return :: a -&gt; Random a<br>return x = \seed0 -&gt; (x, seed0)<br><br>sumTwoDice :: Random Int<br>sumTwoDice = rollDie &gt;&gt;= (\die1 -&gt; rollDie &gt;&gt;= (\die2 -&gt; return (die1 + die2)))<br><br></td></tr></table><br>