    {-# LANGUAGE CPP #-}

    #ifdef __HLINT__
    #elif !MIN_VERSION_base(4,5,0)
    # error This module doesn't provide compat-shims for versions prior to base-4.5
    #endif

    -- | Bridge impedance mismatch of different @base@ versions back till @base-4.5@ (GHC 7.4.2)
    module CompatPrelude
        ( ($>)
        , isSymbolChar
        ) where

    #if MIN_VERSION_base(4,7,0)
    import           Data.Functor                ( ($>) )
    #else
    import           Data.Functor                ( (<$) )
    #endif

    #if MIN_VERSION_base(4,9,0)
    import           Text.Read.Lex                      (isSymbolChar)
    #else
    import           Data.Char (GeneralCategory(..), generalCategory)
    #endif

    #if !MIN_VERSION_base(4,7,0)
    infixl 4 $>

    -- | Flipped version of '<$'.
    --
    -- @since 4.7.0.0
    ($>) :: Functor f => f a -> b -> f b
    ($>) = flip (<$)
    #endif

    #if !MIN_VERSION_base(4,9,0)
    -- inlined from base-4.10.0.0
    isSymbolChar :: Char -> Bool
    isSymbolChar c = not (isPuncChar c) && case generalCategory c of
        MathSymbol           -> True
        CurrencySymbol       -> True
        ModifierSymbol       -> True
        OtherSymbol          -> True
        DashPunctuation      -> True
        OtherPunctuation     -> c `notElem` "'\""
        ConnectorPunctuation -> c /= '_'
        _                    -> False
      where
        -- | The @special@ character class as defined in the Haskell Report.
        isPuncChar :: Char -> Bool
        isPuncChar = (`elem` (",;()[]{}`" :: String))
    #endif