on master help sign in
Merge pull request #58 from haskell-hvr/issue-57

Make toString slightly faster

commit6eb38de53b5bc1fc71611055540d5b4c23bba82e authorOleg Grenrus <oleg.grenrus@iki.fi> dateWed 17 Feb 2021, 00:04 (6 years ago) parent0f43920a97c902
1 file changed+17−11
uuid-types/Data/UUID/Types/Internal.hs+17−11
uuid-types/Data/UUID/Types/Internal.hs+17−11
@@ -334,19 +334,25 @@ fromString' s0 = do
334334--
335335--
336336toString :: UUID -> String
337−toString uuid = hexw w0 $ hexw' w1 $ hexw' w2 $ hexw w3 ""
338− where hexw :: Word32 -> String -> String
339− hexw w s = hexn w 28 : hexn w 24 : hexn w 20 : hexn w 16
340− : hexn w 12 : hexn w 8 : hexn w 4 : hexn w 0 : s
341−
342− hexw' :: Word32 -> String -> String
343− hexw' w s = '-' : hexn w 28 : hexn w 24 : hexn w 20 : hexn w 16
344− : '-' : hexn w 12 : hexn w 8 : hexn w 4 : hexn w 0 : s
345−
346− hexn :: Word32 -> Int -> Char
337+toString uuid = hexw0 w0 $ hexw1 w1 ""
338+ where hexw0 :: Word64 -> String -> String
339+ hexw0 w s = hexn w 60 : hexn w 56 : hexn w 52 : hexn w 48
340+ : hexn w 44 : hexn w 40 : hexn w 36 : hexn w 32
341+ : '-' : hexn w 28 : hexn w 24 : hexn w 20 : hexn w 16
342+ : '-' : hexn w 12 : hexn w 8 : hexn w 4 : hexn w 0
343+ : s
344+
345+ hexw1 :: Word64 -> String -> String
346+ hexw1 w s = '-' : hexn w 60 : hexn w 56 : hexn w 52 : hexn w 48
347+ : '-' : hexn w 44 : hexn w 40 : hexn w 36 : hexn w 32
348+ : hexn w 28 : hexn w 24 : hexn w 20 : hexn w 16
349+ : hexn w 12 : hexn w 8 : hexn w 4 : hexn w 0
350+ : s
351+
352+ hexn :: Word64 -> Int -> Char
347353 hexn w r = intToDigit $ fromIntegral ((w `shiftR` r) .&. 0xf)
348354
349− (w0,w1,w2,w3) = toWords uuid
355+ (w0,w1) = toWords64 uuid
350356
351357-- | If the passed in `Text` can be parsed as an ASCII representation of
352358-- a `UUID`, it will be. The hyphens may not be omitted.