packages feed

quickcheck-quid-0.0.1.1: src/internal/Internal/Text/Read.hs

{-# LANGUAGE LambdaCase #-}

module Internal.Text.Read where

import Control.Monad
    ( replicateM_ )
import Text.Read
    ( ReadPrec, get, look, pfail )

import qualified Data.List as L

readCharMaybe :: (Char -> Maybe a) -> ReadPrec a
readCharMaybe f = look >>= \case
    a : _ | Just c <- f a ->
        get >> pure c
    _ ->
        pfail

skipChar :: Char -> ReadPrec ()
skipChar charToSkip = readCharMaybe
    (\char -> if char == charToSkip then Just () else Nothing)

skipString :: String -> ReadPrec ()
skipString stringToSkip = do
    remainder <- look
    if stringToSkip `L.isPrefixOf` remainder
    then replicateM_ (length stringToSkip) get
    else pfail