[Haskell] Mixing monadic and non-monadic functions
robert dockins
robdockins at fastmail.fm
Thu Sep 15 16:25:37 EDT 2005
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 ()
>
>
>
More information about the Haskell
mailing list