> On Tue, Dec 06, 2005 at 10:58:45PM +0300, Bulat Ziganshin wrote: > > the third-priority problem is language itself. in particular, i hate > > Haskell school of imperative manipulations: > > > > x' <- readIORef x > > y' <- readIORef y > > writeIORef z (x'*y')
Here's a way to make some of this less messy: class PlusEq a b m | a -> m where (+=) :: a -> b -> m () instance (Num a) => PlusEq (IORef a) a IO where xRef += y = do x <- readIORef xRef writeIORef xRef (x + y) instance (Num a) => PlusEq (IORef a) (IORef a) IO where xRef += yRef = do y <- readIORef yRef xRef += y Then instead of do x <- xRef y <- yRef writeIORef yRef (x + y) you can just say y += x. I've started on an InPlace module to do things like this in general. -Chad Scherrer _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe