{-# LANGUAGE CPP #-} #ifdef __GLASGOW_HASKELL__ {-# LANGUAGE MagicHash #-} #endif module Utils.IsUnit (isUnit, isUnitSupported) where #ifdef __GLASGOW_HASKELL__ import GHC.Exts #endif -- | Check whether the argument is a fully evaluated unit `()`. -- -- Always returns `False` is `isUnitSupported` returns `False`. -- -- Uses `reallyUnsafePtrEquality#`. isUnit :: () -> Bool -- | Checks whether `isUnit` is supported by the Haskell implementation. -- -- Currently returns `True` for ghc and `False` for all other implementations. isUnitSupported :: Bool #ifdef __GLASGOW_HASKELL__ -- simplified from Utils.Containers.Internal.PtrEquality ptrEq :: a -> a -> Bool ptrEq x y = case reallyUnsafePtrEquality# x y of 0# -> False _ -> True isUnit = ptrEq () isUnitSupported = True #else /* !__GLASGOW_HASKELL__ */ isUnit = False isUnitSupported = False #endif