Is there any way to do a lazy bind operation, something like a <- $ getLine return (Constructor $ a) this works for computations in the IO monad :- a <- unsafeInterleaveIO getLine return (Constructor $ a) but I need to do this for a general monad M. Keean Schupke Department of Electrical & Electronic Engineering, Imperial College London.