    {-# LANGUAGE CPP #-}
    {-# LANGUAGE ImplicitParams #-}
    {-# LANGUAGE ConstraintKinds #-}
    module Basement.Compat.CallStack
        ( HasCallStack
        ) where

    #if MIN_VERSION_base(4,9,0)

    import GHC.Stack (HasCallStack)

    #elif MIN_VERSION_base(4,8,1)

    import qualified GHC.Stack

    type HasCallStack = (?callStack :: GHC.Stack.CallStack)

    #else

    import GHC.Exts (Constraint)

    type HasCallStack = (() :: Constraint)

    #endif