Before nothing, thanks Axel and Alastair. Following your suggestions i have constructed another two solutions: 1- getMem s = catch (do m <- newCString s return m) (\_ -> return nullPtr) -- the exception handler could be more elaborated. 2- fpred p | p == nullPtr = True | otherwise = False getMem s = throwIf (fpred) (\nullPtr -> "memory out") (do m <- newCString s return m) in both cases main = getMem s1 >>= \p1 -> getMem s2 >>= \p2 -> let p3 = hstrL p2 p1 in peekCString p3 >>= \s -> print s Which of the three solutions, including those of Alastair, would be better?. Can one fail and other one not in some situation?. Thanks again for your help, gustavo