{-# LANGUAGE OverloadedStrings #-} module Data.Text.Additions ( constTimeCompare ) where import Control.Applicative ((<$>)) import Data.Bits import Data.Char import Data.Function (on) import Data.List (foldl') import qualified Data.Text as T constTimeCompare :: T.Text -> T.Text -> Bool constTimeCompare l r = T.length l == T.length r && comp' l r where comp' a b = 0 == foldl' (.|.) 0 (uncurry (on xor ord) <$> T.zip a b)