used bind instead of liftM.