Skip to content

Commit

Permalink
Make sure stimes works right in corner cases.
Browse files Browse the repository at this point in the history
  • Loading branch information
kindaro committed Apr 13, 2024
1 parent 9657d60 commit 2a4b0fc
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/Data/Text.hs
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,8 @@ import Data.Word (Word8)
import Foreign.C.Types
import GHC.Base (eqInt, neInt, gtInt, geInt, ltInt, leInt)
import qualified GHC.Exts as Exts
import GHC.Int (Int8)
import GHC.Int (Int8, Int (I#))
import GHC.Num (Integer(IS, IP, IN))
import GHC.Stack (HasCallStack)
import qualified Language.Haskell.TH.Lib as TH
import qualified Language.Haskell.TH.Syntax as TH
Expand Down Expand Up @@ -361,7 +362,14 @@ instance Read Text where
-- | @since 1.2.2.0
instance Semigroup Text where
(<>) = append
stimes = replicate . P.fromIntegral

-- | Beware: this function will evaluate to error if the given number does
-- not fit into an @Int@.
stimes howManyTimes = case P.toInteger howManyTimes of
IS howManyTimesInt# -> replicate (I# howManyTimesInt#)
IP _ -> P.error "`Data.Text.stimes`: given number does not fit into an `Int`!"
IN _ -> P.const empty

sconcat = concat . NonEmptyList.toList

instance Monoid Text where
Expand Down

0 comments on commit 2a4b0fc

Please sign in to comment.