-- | -- Copyright : (c) Raghu Kaippully, 2020 -- License : MPL-2.0 -- Maintainer : rkaippully@gmail.com -- -- Common utility functions. module WebGear.Util ( takeWhileM , splitOn ) where import Data.List.NonEmpty (NonEmpty (..), toList) takeWhileM :: Monad m => (a -> Bool) -> [m a] -> m [a] takeWhileM _ [] = pure [] takeWhileM p (mx:mxs) = do x <- mx if p x then (x :) <$> takeWhileM p mxs else pure [] splitOn :: Eq a => a -> [a] -> NonEmpty [a] splitOn sep = foldr f ([] :| []) where f x acc | x == sep = [] :| toList acc f x (y :| ys) = (x:y) :| ys