From 7e8171d9fe213972e9ca7599ed4fa543f4089547 Mon Sep 17 00:00:00 2001 From: Vincent Hanquez Date: Fri, 10 Apr 2015 08:29:27 +0100 Subject: [PATCH] add booleanPrim to compat. --- Crypto/Internal/Compat.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Crypto/Internal/Compat.hs b/Crypto/Internal/Compat.hs index a3712a7..71cd25a 100644 --- a/Crypto/Internal/Compat.hs +++ b/Crypto/Internal/Compat.hs @@ -9,15 +9,20 @@ -- or other needed packages, so that modules don't need to use CPP -- {-# LANGUAGE CPP #-} +{-# LANGUAGE MagicHash #-} module Crypto.Internal.Compat ( unsafeDoIO , popCount , byteSwap64 + , booleanPrim ) where import System.IO.Unsafe import Data.Word import Data.Bits +#if __GLASGOW_HASKELL__ >= 708 +import GHC.Prim +#endif -- | perform io for hashes that do allocation and ffi. -- unsafeDupablePerformIO is used when possible as the @@ -46,3 +51,11 @@ byteSwap64 w = .|. ((w `shiftR` 24) .&. 0xff0000) .|. ((w .&. 0xff0000) `shiftL` 24) .|. ((w `shiftR` 8) .&. 0xff000000) .|. ((w .&. 0xff000000) `shiftL` 8) #endif + +#if __GLASGOW_HASKELL__ >= 708 +booleanPrim :: Int# -> Bool +booleanPrim v = tagToEnum# v +#else +booleanPrim :: Bool -> Bool +booleanPrim b = b +#endif