generalized for MonadError and Traverse
# arrow
p
generalized for MonadError and Traverse