module DSV.RequireCompleteParse ( requireCompleteParse , completely ) where import DSV.IO import DSV.ParseError import DSV.ParseStop requireCompleteParse :: MonadThrow m => (ParseStop, a) -> m a requireCompleteParse :: (ParseStop, a) -> m a requireCompleteParse (ParseStop s, a x) = case ParseStop s of ParseStop ParseComplete -> a -> m a forall (f :: * -> *) a. Applicative f => a -> f a pure a x ParseStop ParseIncomplete -> ParseError -> m a forall (m :: * -> *) e a. (MonadThrow m, Exception e) => e -> m a throwM ParseError ParseError completely :: MonadThrow m => m (ParseStop, a) -> m a completely :: m (ParseStop, a) -> m a completely m (ParseStop, a) x = m (ParseStop, a) x m (ParseStop, a) -> ((ParseStop, a) -> m a) -> m a forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (ParseStop, a) -> m a forall (m :: * -> *) a. MonadThrow m => (ParseStop, a) -> m a requireCompleteParse