module HTMLTokenizer.MonadPlus
where
import HTMLTokenizer.Prelude hiding (foldl, foldl1, concat)
{-# INLINE foldl #-}
foldl :: MonadPlus m => (a -> b -> a) -> a -> m b -> m a
foldl step start fetch =
loop start
where
loop !state =
mplus
(do
!element <- fetch
loop (step state element))
(return state)
{-# INLINE foldl1 #-}
foldl1 :: MonadPlus m => (a -> a -> a) -> m a -> m a
foldl1 step fetch =
do
!start <- fetch
foldl step start fetch
{-# INLINE concat #-}
concat :: (MonadPlus m, Monoid a) => m a -> m a
concat =
foldl mappend mempty
{-# INLINE concat1 #-}
concat1 :: (MonadPlus m, Semigroup a) => m a -> m a
concat1 =
foldl1 (<>)
{-# INLINE foldlM #-}
foldlM :: MonadPlus m => (a -> b -> m a) -> a -> m b -> m a
foldlM step start fetch =
loop start
where
loop !state =
mplus
(do
!element <- fetch
loop =<< step state element)
(return state)