@@ -0,0 +1,33 @@
1+{-# LANGUAGE MagicHash #-}
2+{-# LANGUAGE OverloadedStrings #-}
6+import qualified Data.Text as T
7+import Data.Attoparsec.Text
9+import Prelude hiding (take, takeWhile)
11+isAsciiAlpha1 :: Char -> Bool
12+isAsciiAlpha1 c = isAsciiLower c || isAsciiUpper c
14+isAsciiAlpha2 :: Char -> Bool
15+isAsciiAlpha2 (C# c) =
16+ tagToEnum# ( ((c `geChar#` 'A'#) `andI#` (c `leChar#` 'Z'#))
17+ `orI#` ((c `geChar#` 'a'#) `andI#` (c `leChar#` 'z'#)) )
21+ [ bench "Text isAsciiAlpha1"
22+ $ whnf (T.length . T.takeWhile isAsciiAlpha1) testString
23+ , bench "Text isAsciiAlpha2"
24+ $ whnf (T.length . T.takeWhile isAsciiAlpha2) testString
26+ , bench "Attoparsec isAsciiAlpha1"
27+ $ whnf (parseOnly (T.length <$> takeWhile isAsciiAlpha1)) testString
28+ , bench "Attoparsec isAsciiAlpha2"
29+ $ whnf (parseOnly (T.length <$> takeWhile isAsciiAlpha2)) testString
33+testString = T.replicate 10 "helloworldthisisarelativelylongstring"