Is the idea here merely an exercise in using the state monad? This can be easily performed using pure code.
Bob On 3 Feb 2011, at 19:18, michael rice wrote: > Given the first program, it seems that the unchanging first element of the > tuple could be handled by a Reader monad, leading to the second program, > where b becomes the state, but how do I get the constant a from the Reader > monad? > > Michael > > ================== > > import Control.Monad.State > > type GeneratorState = State (Double,Double) > > sqrtST :: GeneratorState Double > sqrtST = do (a,b0) <- get > let b1 = (b0**2.0+a)/(2.0*b0) > (if (abs (a-b1**2.0)) < 0.000001 > then > return b1 > else do > put (a,b1) > sqrtST) > > mySqrt a = let b = a/2.0 > in fst ( runState sqrtST (a,b) ) > > {- > *Main> mySqrt 2.0 > 1.4142135623746899 > -} > > ================== > > import Control.Monad.Reader > import Control.Monad.State > > type GeneratorState = State Double > > sqrtST :: GeneratorState Double > sqrtST = do b0 <- get > let a = ? > b1 = (b0**2.0+a)/(2.0*b0) > (if (abs (a-b1**2.0)) < 0.000001 > then > return b1 > else do > put b1 > sqrtST) > > > mySqrt a = let b = a/2.0 > in runReaderT (runState sqrtST b) a > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe