takeWhileM :: Monad m => (a -> m Bool) -> [a] -> m [a]
takeWhileM _ xs@[] = return xs
takeWhileM :: Monad m => (a -> m Bool) -> [a] -> m [a]
takeWhileM _ xs@[] = return xs
takeWhileM _ xs@[] = return xs