I raise you:

class (Monad m) => Ref m c | c -> m
  where new  :: a -> m (c a)
        get  :: c a -> m a
        peek :: c a -> m a
        set  :: c a -> a -> m ()
        modify   :: c a -> (a -> a) -> m a
        modify_  :: c a -> (a -> a) -> m ()
        modifyM  :: c a -> (a -> m a) -> m a
        modifyM_ :: c a -> (a -> m a) -> m ()



Bulat Ziganshin wrote:

Hello Lyle,

Thursday, September 15, 2005, 10:50:30 PM, you wrote:


 z := *x + *y   -- translated to { x' <- readIORef x; y' <- readIORef y; 
writeIORef z (x'+y') }


LK> Right, I realize my suggestion is the same as Ben's. I just prefer a LK> more succinct notation, like special brackets instead of a keyword. I LK> like your idea about IORefs. I think it should work as well for LK> STRefs... perhaps it needs to belong to a type class, in a way?

of course

class Ref c a where
  new :: a -> IO (c a)
  get :: c a -> IO a
  set :: c a -> a -> IO ()




_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to