    {-# LANGUAGE CPP, NoImplicitPrelude #-}
    #if __GLASGOW_HASKELL__ >= 702
    {-# LANGUAGE Trustworthy #-}
    #endif
    module Text.Read.Lex.Compat (
      module Base
    , readBinP
    ) where

    import Text.Read.Lex as Base

    #if !(MIN_VERSION_base(4,16,0))
    import Data.Char (ord)
    import Prelude
    import Text.ParserCombinators.ReadP (ReadP)
    #endif

    #if !(MIN_VERSION_base(4,16,0))
    readBinP :: (Eq a, Num a) => ReadP a
    readBinP = readIntP'2
    {-# SPECIALISE readBinP :: ReadP Integer #-}

    readIntP'2 :: (Eq a, Num a) => ReadP a
    readIntP'2 = readIntP 2 isDigit valDigit
     where
      isDigit  c = maybe False (const True) (valDig2 c)
      valDigit c = maybe 0     id           (valDig2 c)
    {-# SPECIALISE readIntP'2 :: ReadP Integer #-}

    valDig2 :: Char -> Maybe Int
    valDig2 c
      | '0' <= c && c <= '1' = Just (ord c - ord '0')
      | otherwise            = Nothing
    #endif