module DSV.RequireCompleteParse
  ( requireCompleteParse
  , completely
  ) where

import DSV.IO
import DSV.ParseError
import DSV.ParseStop

requireCompleteParse :: MonadThrow m => (ParseStop, a) -> m a
requireCompleteParse (s, x) =
    case s of
        ParseComplete -> pure x
        ParseIncomplete -> throwM ParseError

completely :: MonadThrow m => m (ParseStop, a) -> m a
completely x = x >>= requireCompleteParse