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