
Looks like MaybeT? http://hackage.haskell.org/cgi-bin/hackage-scripts/package/MaybeT-0.1.1
readHandle x = runMaybeT $ do ref <- MaybeT (return x) liftIO (readIORef ref) readField f h = runMaybeT $ do a <- MaybeT (readHandle h) return (f a)
(or, the short version)
readHandle x = runMaybeT (liftIO . readIORef =<< MaybeT (return x)) readField f = runMaybeT . liftM f . MaybeT . readHandle
As a bonus, readHandle and readField work in any MonadIO due to the
use of liftIO (as opposed to just lift).
-- ryan
On Wed, Sep 3, 2008 at 3:09 AM, minh thu
Hi,
I'd like to write a data structure to be used inside the IO monad. The structure has some handles of type Maybe (IORef a), i.e. IORef are pointers and the Maybe is like null pointers.
So I came up with the following functions :
readHandle :: Maybe (IORef a) -> IO (Maybe a) readField :: (a -> b) -> Maybe (IORef a) -> IO (Maybe b)
readHandle Nothing = do return Nothing readHandle (Just r) = do v <- readIORef r return $ Just v
readField f h = do m <- readHandle h return $ fmap f m
Is it something usual ? Are there any related functions in the standard libraries ?
Thanks, Thu _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe