abstracted logic monad to monadplus