util-primitive-control-0.1.1.0: Util/Monad/Primitive/Unsafe.hs
module Util.Monad.Primitive.Unsafe where
import Control.Monad.Base.Control
import Control.Monad.Primitive
import Data.Basic
unsafeInterleaveWhileJust :: (MonadBaseControl m, PrimBase (Base m)) => m (Maybe a) -> (a -> m ()) -> m [a]
unsafeInterleaveWhileJust mma f = go
where
go = mma >>= liftBaseOp_ unsafeInterleave . \ case
Nothing -> pure []
Just a -> (a :) <$> liftBaseOp_ unsafeInterleave (a `seq` f a *> go)