module Unsequential.Prelude
(
module Exports,
modifyM,
skipSepBy,
skipSepBy1,
skipMany,
skipMany1,
)
where
import BasePrelude as Exports hiding (Alt, scanl)
import Control.Monad.IO.Class as Exports
import Control.Monad.Trans.Class as Exports
import Control.Monad.Trans.Except as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass)
import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass)
import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass)
import Control.Monad.Trans.Writer.Strict as Exports
import Data.DList as Exports (DList)
modifyM :: Monad m => (a -> m a) -> StateT a m ()
modifyM f =
StateT (fmap (\s -> ((), s)) . f)
skipSepBy :: Alternative m => m () -> m () -> m ()
skipSepBy one sep =
skipSepBy1 one sep <|> pure ()
skipSepBy1 :: Alternative m => m () -> m () -> m ()
skipSepBy1 one sep =
one *> remainders
where
remainders =
(sep *> one *> remainders) <|> pure ()
skipMany :: Alternative f => f a -> f ()
skipMany fx =
loop
where
loop =
(fx *> loop) <|> pure ()
skipMany1 :: Alternative f => f a -> f ()
skipMany1 fx =
fx *> skipMany fx