{-# OPTIONS_GHC -fno-warn-dodgy-imports #-}

module Common (module Common, module X) where

import           Control.Applicative   as X
import           Control.DeepSeq       as X (NFData (rnf))
import           Control.Exception     as X (ArithException (Overflow, Underflow), throw)
import           Control.Monad         as X
import           Control.Newtype       as X (Newtype (..))
import           Data.Bits             as X
import           Data.ByteString       as X (ByteString)
import           Data.Foldable         as X (asum)
import           Data.Functor.Identity as X
import           Data.Int              as X
import           Data.IntCast          as X
import           Data.List.NonEmpty    as X (NonEmpty (..), (<|))
import           Data.Maybe            as X
import           Data.Proxy            as X (Proxy (Proxy))
import           Data.Semigroup        as X
import           Data.Text             as X (Text)
import           Data.Text.Short       as X (ShortText)
import           Data.Word             as X
import           GHC.Generics          as X (Generic)
import           GHC.TypeLits          as X hiding (Text)
import           Numeric.Natural       as X (Natural)

{-# INLINE rwhnf #-}
rwhnf :: a -> ()
rwhnf x = seq x ()

{-# INLINE inside #-}
inside :: Ord a => a -> (a, a) -> Bool
x `inside` (lb,ub)
  | lb > ub = error "inside: unsatifiable range"
  | otherwise = lb <= x && x <= ub

impossible :: a
impossible = error "The impossible just happened!"