<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">I lifted the code below from here:<br><br>http://en.wikibooks.org/wiki/Haskell/Monad_transformers<br><br>Since the wiki page doesn't say what needs to be imported, I'm guessing.<br><br>Not sure what is happening. Maybe someone can tell me. <br><br>Michael<br><br>==============<br><br>import Control.Monad<br>import Control.Monad.Trans.Class<br>import Data.Char<br><br>newtype (Monad m) =&gt; MaybeT m a = MaybeT { runMaybeT :: m (Maybe a) }<br><br>instance Monad m =&gt; Monad (MaybeT m) where<br>&nbsp;&nbsp;&nbsp; return&nbsp; = MaybeT . return . Just<br>&nbsp;&nbsp;&nbsp; x &gt;&gt;= f = MaybeT $ do maybe_value &lt;- runMaybeT x<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case maybe_value
 of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nothing&nbsp;&nbsp;&nbsp; -&gt; return Nothing<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Just value -&gt; runMaybeT $ f value<br><br>instance Monad m =&gt; MonadPlus (MaybeT m) where<br>&nbsp;&nbsp;&nbsp; mzero&nbsp;&nbsp;&nbsp;&nbsp; = MaybeT $ return Nothing<br>&nbsp;&nbsp;&nbsp; mplus x y = MaybeT $ do maybe_value &lt;- runMaybeT x<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case maybe_value
 of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nothing&nbsp;&nbsp;&nbsp; -&gt; runMaybeT y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Just value -&gt; runMaybeT x<br>&nbsp;<br>instance MonadTrans MaybeT where<br>&nbsp;&nbsp;&nbsp; lift = MaybeT . (liftM Just)<br><br>instance Show (MaybeT m a)<br><br>getValidPassword :: MaybeT IO String<br>getValidPassword = do s &lt;- lift getLine<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guard (isValid s)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 return s<br><br>isValid :: String -&gt; Bool<br>isValid s = (length s &gt; 8) &amp;&amp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((filter isAlphaNum&nbsp; s) == s) &amp;&amp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; any isDigit s &amp;&amp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; any isAlpha s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>askPassword :: MaybeT IO ()<br>askPassword = do lift $ putStrLn "Insert your new password:"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value &lt;- getValidPassword<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lift $ putStrLn "Storing in database..."<br><br>=============<br><br>[michael@localhost ~]$
 ghci<br>GHCi, version 6.12.3: http://www.haskell.org/ghc/&nbsp; :? for help<br>Loading package ghc-prim ... linking ... done.<br>Loading package integer-gmp ... linking ... done.<br>Loading package base ... linking ... done.<br>Loading package ffi-1.0 ... linking ... done.<br>Prelude&gt; :l test5<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( test5.hs, interpreted )<br>Ok, modules loaded: Main.<br>*Main&gt; askPassword<br>Loading package transformers-0.2.2.0 ... linking ... done.<br>*** Exception: stack overflow<br>*Main&gt; <br><br></td></tr></table><br>