use LogicT monad