partitionM :: (T.Foldable t, Monad f) => (a -> f Bool) -> t a -> f ([a], [a])
partitionM which cont = T.foldrM (\c (a, b) -> do
                                     cwhich <- which c
                                     return (if cwhich then (a, (c:b)) else ((c:a), b))
                                 ) ([], []) cont
partitionM :: (T.Foldable t, Monad f) => (a -> f Bool) -> t a -> f ([a], [a])
partitionM which cont = T.foldrM (\c (a, b) -> do
                                     cwhich <- which c
                                     return (if cwhich then (a, (c:b)) else ((c:a), b))
                                 ) ([], []) cont
partitionM which cont = T.foldrM (\c (a, b) -> do
                                     cwhich <- which c
                                     return (if cwhich then (a, (c:b)) else ((c:a), b))
                                 ) ([], []) cont