@@ -211,6 +211,7 @@ where
211211import Control.Monad (void)
212212import Control.Monad.IO.Class (MonadIO(..))
213213import Data.Functor.Identity (Identity(..))
214+import Data.Int (Int64)
214215import Data.Map.Strict (Map)
215216
216217import Prelude
@@ -556,22 +557,18 @@ stdDev = sqrt variance
556557--
557558-- @since 0.7.0
558559{-# INLINABLE rollingHashWithSalt #-}
559−rollingHashWithSalt :: (Monad m, Enum a) => Int -> Fold m a Int
560+rollingHashWithSalt :: (Monad m, Enum a) => Int64 -> Fold m a Int64
560561rollingHashWithSalt salt = Fold step initial extract
561562 where
562− k = 2891336453
563+ k = 2891336453 :: Int64
563564 initial = return salt
564− step cksum a = return $ cksum * k + fromEnum a
565+ step cksum a = return $ cksum * k + fromIntegral (fromEnum a)
565566 extract = return
566567
567568-- | A default salt used in the implementation of 'rollingHash'.
568569{-# INLINE defaultSalt #-}
569−defaultSalt :: Int
570−#if WORD_SIZE_IN_BITS == 64
571−defaultSalt = 0xdc36d1615b7400a4
572−#else
573−defaultSalt = 0x087fc72c
574−#endif
570+defaultSalt :: Int64
571+defaultSalt = -2578643520546668380
575572
576573-- | Compute an 'Int' sized polynomial rolling hash of a stream.
577574--
@@ -579,7 +576,7 @@ defaultSalt = 0x087fc72c
579576--
580577-- @since 0.7.0
581578{-# INLINABLE rollingHash #-}
582−rollingHash :: (Monad m, Enum a) => Fold m a Int
579+rollingHash :: (Monad m, Enum a) => Fold m a Int64
583580rollingHash = rollingHashWithSalt defaultSalt
584581
585582-- | Compute an 'Int' sized polynomial rolling hash of the first n elements of
@@ -587,7 +584,7 @@ rollingHash = rollingHashWithSalt defaultSalt
587584--
588585-- > rollingHashFirstN = ltake n rollingHash
589586{-# INLINABLE rollingHashFirstN #-}
590−rollingHashFirstN :: (Monad m, Enum a) => Int -> Fold m a Int
587+rollingHashFirstN :: (Monad m, Enum a) => Int -> Fold m a Int64
591588rollingHashFirstN n = ltake n rollingHash
592589
593590------------------------------------------------------------------------------